我试图处理 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 上产生不可预测的结果。