將 Eval 與 Getopt 一起使用
雖然 pop 類似函式可能不需要 eval,但是無論何時使用 getopt 都需要 eval:
考慮以下接受 -h 作為選項的函式:
f()
{
local __me__="${FUNCNAME[0]}"
local argv="$(getopt -o 'h' -n $__me__ -- "$@")"
eval set -- "$argv"
while :; do
case "$1" in
-h)
echo "LOLOLOLOL"
return 0
;;
--)
shift
break
;;
done
echo "$@"
}
沒有 eval set -- "$argv" 會產生 -h -- 而不是所需的 (-h --),然後進入無限迴圈,因為 -h -- 與 -- 或 -h 不匹配。