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옵션이 인수 없이 제공되면 실패하고 두 번째 옵션 은 배열에 항목이 있는지 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]"
}

관련 정보