POSIX getopts拒绝确认数字$ OPTARG值

时间:2012-01-06 16:39:41

标签: posix numeric arguments getopts

我使用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。

1 个答案:

答案 0 :(得分:0)

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