Shell-Script

如何在 zparseopts 中強制執行選項(不是選項的參數)?

  • June 16, 2020

在下面的範例中:

function zp () {
   zparseopts -E -walk:=o_walk
   echo "walk: $o_walk"
}

我得到以下輸出:

$ zp --walk "Walking"
walk            : --walk Walking
$ zp --walk
zp:zparseopts:2: missing argument for option: -walk
walk            :

這裡選項的參數是強制性的,所以我收到了這個錯誤。

如何使該選項成為強制性選項,以便我必須傳遞--walkzp它會引發錯誤?

我不完全了解zparseopts,但我認為getopt沒有,我只在手冊中看到對強制參數的引用zparseopts

如果設置了結果選項,您始終可以手動檢查:

function zp () {
   if ! zparseopts -E -walk:=o_walk; then
       return 1
   fi
   if [ $#o_walk = 0 ]; then
       echo "required option --walk missing" >&2
       return 1
   fi
   echo "walk: $o_walk"
}

在這裡,zparseopts如果在沒有參數的情況下給出選項,則失敗,第二個if顯式測試o_walk數組是否有任何項目。

使用關聯數組來收集參數也是一種選擇,對我來說它感覺更乾淨:

function zp () {
   if ! zparseopts -E -A opts -walk: ; then
       return 1
   fi
   if ! [ ${opts[--walk]+x} ]; then
       echo "required option --walk missing" >&2
       return 1
   fi
   echo "walk: $opts[--walk]"
}

引用自:https://unix.stackexchange.com/questions/593191