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