【问题标题】:POSIX getopts refuses to acknowledge numeric $OPTARG valuePOSIX getopts 拒绝承认数字 $OPTARG 值
【发布时间】:2012-01-06 16:39:41
【问题描述】:

我正在使用 getopts 来解析在 bash 下运行的自定义脚本的选项。

实现这一点的代码非常标准:

while getopts :s: opt; do
  case $opt in
    s)
      echo "\$OPTARG is $OPTARG"
      ;;
  esac
done

但是对于我使用数字参数指定的参数,$OPTARG 是空的:

myscript.sh -s 012345 # => [ $OPTARG = "" ]

可以通过将参数括在引号中来解决此问题。不过,这对于数字参数来说是丑陋的。

myscript.sh -s "012345" #  => [ $OPTARG = "012345" ]

还有比这更优雅的解决方案吗?

更新

事实证明,我的实际代码缺少一个“:”,因此该参数不期望有参数。我不知道为什么字符串值会打印出预期的值,但是数字参数现在可以工作了,我已经指定参数需要一个 arg。

【问题讨论】:

  • 您应该显示您的代码并准确指定您正在使用的 shell。
  • 完成,感谢您的明智建议。
  • 它对我有用,输出:$OPTARG is 012345。什么版本的 Bash?您的脚本中是否有 shebang(代码中未显示)?
  • Ack 我刚刚意识到为什么它不起作用,更新后。感谢丹尼斯为我测试,非常感谢!
  • 您可以发布您的发现作为答案然后接受它。

标签: posix numeric arguments getopts


【解决方案1】:

事实证明,实际使用的代码缺少“:”,因此参数不期望有参数。从getopts :s 更改为get opts :s: 解决了这个问题。请注意,前导冒号具有不同的含义 - 包含它会禁用 getopts 的错误输出,因此不会报告无法识别的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 2019-11-25
    • 2016-10-16
    • 2014-03-09
    • 2014-03-30
    相关资源
    最近更新 更多