使用getopt分析命令行參數時,可以在選項標記和所需參數的參數之間插入一個空格,但不能插入可選參數。可選參數只有在選項後面纔會被解析。爲什麼不能使用getopt在選項和可選參數之間有空格?
TEMP=`getopt -o p:q:: -n 'mkqueue.sh' -- "[email protected]"`
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 2014-10-17 19:11:59
@ 5gon12eder,如果你有這個答案,你至少會得到我的讚賞。它解釋了「爲什麼」,這是這個問題的標題所要求的。 :) – 2014-10-17 19:41:59