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