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