bash getopts 在第一个参数后看不到标志

bash getopts 在第一个参数后看不到标志

我试图处理 bash 脚本中第一个参数后的标志,但 getopts 仅返回参数之前的标志。

or flag in getopts; do
    case $flag in
        d)
            echo "-d flag was triggered!" >&2
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            ;;
    esac
done

当我运行它时,我希望在这个例子中“标志被触发!”字符串打印三次而不是一次。

$ ./myscript.sh -d arg1 -d -d -d
getopts
-d (develop mode) was triggered!

答案1

请查看 GetOpt 上的本教程。在这种情况下,你似乎忽略了你的 opstring

尝试类似的事情:

for flag in getopts "M:d:a"; do
    case $flag in
...

这意味着您期望 -d -M 和 -a 是可能的有效选项。: 表示 -d 和 a 选项带有参数(: 位于相关选项之前),因此您可以像这样调用它

./somescript -M -d sometext -a somemoretext

也不要使用重复的选项。它将在不同的系统和 shell 上产生不可预测的结果。

http://wiki.bash-hackers.org/howto/getopts_tutorial

相关内容