使用 getopt 解析命令行参数时,对于必需参数,您可以在选项标志和参数之间加入空格,但对于可选参数则不行。只有当可选参数紧跟在选项后面时,才会解析可选参数。
TEMP=`getopt -o p:q:: -n 'mkqueue.sh' -- "$@"`
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
# Note the quotes around `$TEMP': they are essential!
eval set -- "$TEMP"
# Now go through all the options
while true ; do
case "$1" in
-p) echo "Option p, argument \`$2'" ; shift 2 ;;
-q)
case "$2" in
"") echo "Option q, no argument"; shift 2 ;;
*) echo "Option q, argument \`$2'" ; shift 2 ;;
esac ;;
--) shift ; break ;;
*) echo "Internal error!" ; exit 1 ;;
esac
done
基于此:http://software.frodo.looijaard.name/getopt/docs/getopt-parse.bash
当我不带可选参数运行脚本时,它可以正常工作:
./mkqueue.sh -p adfsa -q
Option p, argument `adfsa'
Option q, no argument
如果我尝试在-q后面加上可选参数并在它们之间加上空格,那么它将无法工作:
./mkqueue.sh -p adfsa -q sdfasdfa
Option p, argument `adfsa'
Option q, no argument
如果选项和参数之间没有空格,它就可以工作,即使必需参数需要空格。
./mkqueue.sh -p adfsa -qsdfasdfa
Option p, argument `adfsa'
Option q, argument `sdfasdfa'
这个问题有解决方法吗?
./a.out -q foo bar
应该解析为./a.out -qfoo bar
还是./a.out -q -- foo bar
? - 5gon12eder