我正在尝试创建一个bash脚本并接受2个选项
因为这是有效的
while getopts ":a:b:" opt; do
case $opt in
a)
echo "-a was triggered!, Parameter: $OPTARG" >&2
;;
b)
echo "-b was triggered!, Parameter: $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
我跑
bash test.sh -a aaa -b bbb
我得到了
-a was triggered!, Parameter: aaa
-b was triggered!, Parameter: bbb
那么,我试过这个
while getopts ":fe:be:" opt; do
case $opt in
fe)
echo "-fe was triggered!, Parameter: $OPTARG" >&2
;;
be)
echo "-be was triggered!, Parameter: $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
但它似乎不起作用。
我跑
bash test.sh -fe 4444 -be 3333
我的提示中没有打印任何内容。
我期待看到类似的东西
-be was triggered!, Parameter: 3333
-fe was triggered!, Parameter: 4444
如何继续进行调试?
我现在对任何建议持开放态度。
任何提示/建议/帮助都将非常感谢!
答案 0 :(得分:4)
因为-fe 4444
被解析为-f -e 4444
。
测试代码:
while getopts ":fe:be:" opt; do
case $opt in
b)
echo "-b was triggered!, Parameter: $OPTARG" >&2
;;
e)
echo "-e was triggered!, Parameter: $OPTARG" >&2
;;
f)
echo "-f was triggered!, Parameter: $OPTARG" >&2
;;
fe)
echo "-fe was triggered!, Parameter: $OPTARG" >&2
;;
be)
echo "-be was triggered!, Parameter: $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
输出:
$ bash test.sh -fe 4444 -be 3333
-f was triggered!, Parameter:
-e was triggered!, Parameter: 4444
-b was triggered!, Parameter:
-e was triggered!, Parameter: 3333
使用--fe 4444
等长选项是合适的。
如何用bash解析长选项已在另一篇文章中得到解答。
- > Using getopts in bash shell script to get long and short command line options