이전 버전의 zsh의 zparseopts 및 연관 배열

이전 버전의 zsh의 zparseopts 및 연관 배열

zparseopts두 가지 서로 다른 버전의 zsh의 서로 다른 동작으로 인해 혼란스러워졌습니다. 기본적으로 연관 배열에 기본 옵션 값 목록을 설정하고 명령줄에 지정된 옵션으로 해당 기본값을 재정의하려고 합니다. 아래 코드는 zsh 5.0.6에서는 잘 작동하지만 4.3.6에서는 이상하게 작동합니다. 특히 zsh 4.3.6에서 단일 키를 덮어쓰면 전체 기본값 배열을 덮어쓰게 됩니다.

스크립트

typeset -A opts
opts=(
--opt1 a
--opt2 b
)

zparseopts -A opts -K -- -opt1: -opt2:
echo ${(k)opts}

스크립트 실행

$ myscript 
--opt1 --opt2  # both zsh 4.3.6 and 5.0.6

$ myscript --opt1 x
--opt1 --opt2  # zsh 5.0.6; element of array is replaced
--opt1         # zsh 4.3.6; adding an element overwrites the whole array, no more opt2

-K4.3.6과 5.0.6의 옵션 항목 이 동일하기 때문에 이 동작은 혼란스럽습니다 zparseopts.

-K 이 옵션을 사용하면 -a 및 -A 옵션과 '=array' 형식으로 지정된 배열은 지정이 사용되지 않을 때 변경되지 않은 채로 남습니다. 이를 통해 zparseopts를 호출하기 전에 기본값을 할당할 수 있습니다.

답변1

echo ${(kv)opts}4.3.6 및 5.0.6을 실행하면 4.3.6이 -K재설정으로 해석되어 표시되어야 opts합니다 .어느옵션이 제공되며 사용될 때만 재설정됩니다 5.0.6(보유 또는 기타 항목).opts[--opt1]--opt1--opt2

(이것은 5.0.2와 5.0.6 사이에서 언젠가 변경된 것으로 보입니다. 확인을 위해 zsh-workers 메일링 리스트에 문의할 수 있습니다.) =

관련 정보