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}

관련 정보