zsh, 분할 확장%~

zsh, 분할 확장%~

그것에 대해 내가 할 수 있는 일은 아무것도 없습니다. 저는 zsh를 사용하고 있으며 단순히 %3~문자 확장을 분할하려고 합니다 /. 이는 $(pwd)및 확장과 잘 작동합니다. $PWD둘 다 경로와 유사한 문자열이기도 합니다.

다음 코드를 사용하여 문자열을 분할하려고 합니다 ("${(@s./.)a}"). 여기서 a 는 a=$(pwd)또는 입니다 a=%3~. 다시 말하지만, 이 코드는 작동 pwd하지만 작동하지 않습니다 %3~.

저는 아직 쉘 스크립팅에 익숙하지 않습니다. 하지만 제가 이해하는 바에는 차이가 없을 것입니다. 내가 무엇을 하든 %~분할이 올바르게 확장되도록 할 수 없습니다 . 내가 시도한 것들:

# Ran from /home/me/code
a=%3~
b=$(pwd)
c=$PWD
d="/test/1/2"

e=$(echo "$a")
f="/$a"

echo $a # ~/code
echo $b # /home/me/code
echo $c # /home/me/code
echo $d # /test/1/2
echo $e # ~/code
echo $f # /~/code

("${(@s./.)a}") # ~/code
("${(@s./.)b}") # home me code
("${(@s./.)c}") # home me code
("${(@s./.)d}") # test 1 2
("${(@s./.)e}") # ~/code
("${(@s./.)f}") # /~/code

나는 실제로 zsh가 의도적으로 일관성이 없다고 생각하기 시작했습니다. 그러나 나는 뭔가를 놓치고 있다고 확신합니다. 나는 또한 ("${(ps./.)a}")그것을 읽었을 때 똑같은 일을 해야 한다고 생각했기 때문에 그것을 시도했습니다 . 나는 또한 IFS 기반 분할, 설정을 시도했습니다 IFS="/". 동일하며 일반 문자열에서는 작동하지만 %~.???

편집하다: 완전성을 위해 이는 .zsh-theme 파일에 있습니다. 그게 중요할 수도 있겠다 싶었는데? 기술적으로, 나는 그것을 실행하는 사람이 아니기 때문에(oh-my-zsh에 의해 실행됨) 아마도 그 수준에서 뭔가 이상한 일이 벌어지고 있을 것입니다.

답변1

프롬프트 이스케이프가 일반적으로 평가되는 컨텍스트 외부에서 프롬프트 이스케이프를 사용하려고 합니다. 따라서 변수에 문자열이 포함되어 있으므로 %3~문자열을 분할하려고 하면 나중에 / 에 할당된 다음 zsh가 확장한다고 가정 %3~합니다 .%3~PS1PROMPT%3~

%3~매개변수 확장을 수행하고 문자열을 프롬프트 이스케이프 처리하려면 %다음과 같이 매개변수 확장 플래그를 사용할 수 있습니다.${(%)a}

관련 정보