zsh
아래 예는 제가 스크립트를 "일상적인 WTF"라고 생각하는 것을 보여줍니다. 나는 zsh
이러한 혼란스러운 사례를 스스로 해결할 수 있을 만큼 방대한 양의 규칙을 잘 이해하려는 희망을 거의 포기했지만 여전히 이를 파악하는 데 도움이 될 몇 가지 설정, 기술, 도구 또는 요령을 찾고 싶습니다. . 적어도 무슨 일이 일어났는지 분석할 수 있게 도와주세요. 일부 코드를 단계별로 실행하거나 실행 추적을 확인하기 위해 디버거를 사용하는 것과 본질적으로 유사합니다.
나는 이것이 현재 환경에서 정의되지 않은 식별자 에 대한 ${(%):-%x}
귀여운 약칭이라고 생각합니다. 실제로 다음이 사실인 것 같습니다.${(%)NONEXISTENT:-%x}
NONEXISTENT
# /tmp/test
echo "${(%)NONEXISTENT:-%x}"
echo "${(%):-%x}"
결과:
% zsh /tmp/test
/tmp/test
/tmp/test
그래서 같은 토큰으로, 나는 그것이 ${(%)-%x}
단지 의 귀여운 약칭이라고 생각합니다 ${(%)NONEXISTENT-%x}
.
지금쯤 예상하셨겠지만, 제가 틀렸습니다. 이는 이전에 표시된 스크립트를 몇 줄로 확장한 다음 스크립트에 나와 있습니다.
# /tmp/test
echo "${(%)NONEXISTENT:-%x}"
echo "${(%):-%x}"
echo "${(%)NONEXISTENT-%x}"
echo "${(%)-%x}"
결과:
% zsh /tmp/test
/tmp/test
/tmp/test
/tmp/test
569X
더 이상하게도 세부 사항은 스크립트가 실행되는지 또는 스크립트의 출처에 따라 달라집니다.
% source /tmp/test
/tmp/test
/tmp/test
/tmp/test
5679BJTVXgim