如果参数是文件名,bash getopts会被删除吗?

时间:2012-05-29 00:48:58

标签: bash getopts

我正在使用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循环之外的文件,它们似乎注册得很好。

1 个答案:

答案 0 :(得分:1)

由于您在":a:b:c:d"中的每个选项字母后面都存在冒号(第一个冒号影响错误处理),因此您已指出每个选项都需要参数,因此脚本会将-b视为-a的论点。当遇到文件名时,它会检测到选项处理应该停止。

您应该向-a提供参数,或者从不需要参数的选项字母中删除冒号。

进行这些更正后,您的脚本会将文件名视为-b的参数,变量$OPTARGS将包含处理-b时的文件名。

相关问题