我正在尝试创建一个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
Run Code Online (Sandbox Code Playgroud)
我跑
bash test.sh -a aaa -b bbb
我有
-a was triggered!, Parameter: aaa
-b was triggered!, Parameter: bbb
Run Code Online (Sandbox Code Playgroud)
所以,我尝试了这个
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
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。
我跑
bash test.sh -fe 4444 -be 3333
提示中什么也没打印。
我原本希望看到这样的东西
-be was triggered!, Parameter: 3333
-fe was triggered!, Parameter: 4444
Run Code Online (Sandbox Code Playgroud)
人们将如何进一步调试呢?
因为它-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
Run Code Online (Sandbox Code Playgroud)
输出:
$ 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
Run Code Online (Sandbox Code Playgroud)
使用诸如的长选项是适当的--fe 4444。如何用bash解析长选项已在另一篇文章中回答。
-> 在bash shell脚本中使用getopts获取长和短命令行选项
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |