2개의 매개변수가 필요한 zsh 경쟁 스크립트에서 선택적 매개변수를 지정하는 방법은 무엇입니까?

2개의 매개변수가 필요한 zsh 경쟁 스크립트에서 선택적 매개변수를 지정하는 방법은 무엇입니까?

저는 zsh에 대한 사용자 정의 경주 함수를 작성 중입니다. 현재 다음 코드가 있습니다

_arguments \
...
'(-G --glitchpct)'{-G+,--glitchpct=}'[Controls how often the characters on screen glitch]'

나는 현재 또는 -G VALUE둘 중 하나 glitchpct=VALUE--glitchpct VALUE 허용한다고 지정합니다(동일한 그룹에 속하므로 상호 배타적임).

매개변수 값이 1개가 아닌 2개가 필요한 경우 어떻게 해야 하나요? 즉, -G VALUE1 VALUE2또는 가 있을 것으로 예상합니다 --glitchpct=VALUE1,VALUE2. 이것을 어떻게 지정하나요? 또한 3개의 동일한 매개변수가 있는 경우 차이점은 무엇입니까?

또한 각 매개변수에 대한 사용자 정의 메시지를 표시할 수 있습니까? VALUE1표시되어야 'float from 0 to 50'하며 화면에 VALUE2표시되어야 한다고 말합니다 . 내장을 통해 이 작업을 수행 'float from 100 to 150'할 수 있다고 생각 하지만 어떻게 작동하게 만드는지 잘 모르겠습니다. _message다음과 같이 상태를 지정해 보았습니다. (아직 두 개의 값을 사용하는 방법을 파악하지 못했기 때문에 이는 하나의 값에서만 작동합니다.)

_arguments \
...
'(-G --glitchpct)'{-G+,--glitchpct=}'[Controls how often the characters on screen glitch]:float:->display_float'
...
case "$state" in
        (display_float)
            _message "sample message"
        ;;
    esac

그러나 이것은 아무것도 보여주지 않습니다. 다음 형식도 작동하지 않습니다.

'(-G --glitchpct)'{-G+,--glitchpct=}'[Controls how often the characters on screen glitch]:float:_message "sample message"

답변1

매개변수 배열을 포함하는 예제로 연결되기를 바라면서 위의 설명을 제공합니다. 다음은 링크에서 직접 복사한 예입니다.

_arguments '-m[music file]:filename:->files' '-f[flags]:flag:->flags'
case "$state" in
    files)
        local -a music_files
        music_files=( Music/**/*.{mp3,wav,flac,ogg} )
        _multi_parts / music_files
        ;;
    flags)
        _values -s , 'flags' a b c d e
        ;;
esac

위의 예는 Howto에서 가져온 것이며 매개변수를 배열로 전달하는 방법을 보여줍니다. 이 예를 분석하면 다음과 같습니다.

  1. 그 진술은 -m다음과 같을 수도 있습니다 -ma. a모든 음악 파일 목록이 포함되며 파일 이름은 필요하지 않습니다.
  2. flags섹션은 구체화되지는 않았지만 다음의 가능한 값 -f으로 초기화를 허용합니다.-fs-fa-fe

코드 관련: 위의 코드와 유사한 다음 형식을 고려하세요.

_arguments '-G[glitchpercentage]:gpercent:->percents' '-f[flags]:flag:->flags'
case "$state" in
    percents)
        local -a percents
        glitchpercentage=\\do something to set to 100%
        _message "Some message for all option"
        local -h percents
        glitchpercentage=//do something to set to 50%
        _message "Some message for half option"
        ;;
    flags)
         // Add these to control the program, i.e. use these options
         // if they dont control something in the percents array.
        _values -s , 'flags' a b c d e
        ;;
esac

위의 내용은 테스트되지 않았으므로 의사 코드로 간주하십시오. 위와 같이 배열을 사용하려고한다고 생각합니다.

관련 정보