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