zsh 매개변수 확장 플래그(P) 및 연관 배열

zsh 매개변수 확장 플래그(P) 및 연관 배열

zshexpn 매뉴얼 페이지(zsh 버전 5.1.1)에는 다음이 있습니다.

매개변수 확장 플래그

(P): 매개변수 이름의 값이 해당 값이 사용될 추가 매개변수 이름으로 해석되도록 강제합니다.typeset 명령군 중 하나(특히 변환)를 사용하여 설정된 플래그는 이러한 방식으로 사용되는 이름 값에 적용되지 않습니다.

따라서 일반 배열 매개변수가 있는 경우 다음과 같이 할 수 있습니다.

typeset -a array
array=(x y)

ptr=array
echo ${${(P)ptr}[1]}

이는 조판 플래그에서 매개변수를 배열로 표시할 것을 요구하지 않기 x때문이라고 생각합니다 .-a

하지만 연관 배열로 동일한 작업을 수행하면 다음과 같습니다.

typeset -A assoc
assoc=(foo x bar y)

ptr=assoc
echo ${${(P)ptr}[foo]}

화면에 아무것도 인쇄되지 않습니다. 이는 위의 매뉴얼 페이지 메시지와 일치해 보입니다. 왜냐하면 다음을 실행하면:

echo ${(P)ptr}
# returns: x y
echo ${${(P)ptr}[1]}
# returns: x
echo ${${(P)ptr}[2]}
# returns: y

-A플래그 가 typeset삭제되고 일반 배열이 있는 것처럼 동작합니다 .

하지만 다음 명령을 실행하면:

echo ${(Pk)ptr}
# returns: foo bar
echo ${(Pv)ptr}
# returns: x y
echo ${(Pkv)ptr}
# returns: foo x bar y

어떤 의미에서는 연관 배열 상태가 항상 손실되는 것은 아닌 것 같습니다. 그래서 나는 typeset그들이 항상 그렇게 하지 않는 것처럼 보이는데 왜 로고를 떨어뜨리도록 설계되었는지 정말로 이해하지 못합니다 .

주로 내 질문은 다음과 같습니다. 이를 수행할 수 있는 방법이 있습니까?

echo ${${(P)ptr}[foo]}

플래그가 삭제되지 않은 것처럼 x( key 와 연관된 값 )을 반환 하고 다른 연관 배열처럼 처리할 수 있습니다. 제 생각에는footypeset -A아니요s 사용으로 전환 eval: 사용할 수 있는 zsh 매개변수 트릭이 있나요?

관련 정보