0

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

4

1 回答 1

0

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

于 2012-01-11T22:15:54.897 回答