將 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
不匹配。