Shell-Script
如何在 zparseopts 中強制執行選項(不是選項的參數)?
在下面的範例中:
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 :
這裡選項的參數是強制性的,所以我收到了這個錯誤。
如何使該選項成為強制性選項,以便我必須傳遞
--walk
給zp
它會引發錯誤?
我不完全了解
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]" }