zparseoptsでオプション(オプションの引数ではない)を強制的に選択する方法は?

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エラーを発生させるにはどうすればよいですか?

ベストアンサー1

よく分からないがないよう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オプションが引数なしで指定された場合は失敗し、2番目のオプションは配列に項目があるかどうかを明示的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]"
}

おすすめ記事