我正在使用getopts编写脚本,命令可以按任意顺序包含参数,包括-a
等有效参数和stuff.txt
等文件名。问题是,当我运行这样的命令时:
program.sh -a -b stuff.txt -c -d
我的代码处理参数-a
和-b
,直到它到达文件名,然后停止处理,之后不会触及参数-c
和-d
。我的代码看起来有点像这样:
while getopts ":a:b:c:d" opt; do
case "$opt" in
a) # do something;;
b) # do something;;
/?) echo ERROR
exit 1;;
esac
done
我处理while
循环之外的文件,它们似乎注册得很好。
答案 0 :(得分:1)
由于您在":a:b:c:d"
中的每个选项字母后面都存在冒号(第一个冒号影响错误处理),因此您已指出每个选项都需要参数,因此脚本会将-b
视为-a
的论点。当遇到文件名时,它会检测到选项处理应该停止。
您应该向-a
提供参数,或者从不需要参数的选项字母中删除冒号。
进行这些更正后,您的脚本会将文件名视为-b
的参数,变量$OPTARGS
将包含处理-b
时的文件名。