1

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

4

1 回答 1

1

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

您应该为-a不需要参数的选项字母提供参数或删除冒号。

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

于 2012-05-29T00:51:06.077 回答