【发布时间】:2012-01-01 05:12:45
【问题描述】:
我试图理解为什么 getopts 似乎忽略了所有参数,如果“未命名”参数位于任何命名参数之前。
使用来自http://wiki.bash-hackers.org/howto/getopts_tutorial 的示例,
#!/bin/bash
while getopts ":a" opt; do
case $opt in
a)
echo "-a was triggered!" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
并观察结果:
$ ./opt_test
$ ./opt_test -a
-a was triggered!
$ ./opt_test -a -f
-a was triggered!
Invalid option: -f
$ ./opt_test a -a -f
$ ./opt_test a -a
$ ./opt_test a -f
$ ./opt_test lala -f
$
所以在前面加上一个未命名的参数(一个没有破折号的参数)似乎会让getopts 忽略所有参数。
为什么会这样,我该如何解决?我希望我的程序能够捕获此类内容并打印使用屏幕。
【问题讨论】:
标签: bash command-line options getopts