Zsh, разделяя расширение %~

Zsh, разделяя расширение %~

Я в тупике с этим. Я использую zsh и пытаюсь просто разделить расширение %3~на /символе. Это отлично работает с расширением $(pwd)и $PWD- оба из которых также являются строками-путями.

Я пытаюсь разделить строку, используя следующий код ("${(@s./.)a}")- где a - это либо , a=$(pwd)либо a=%3~. Опять же, этот код работает с pwd, но не с %3~.

Я все еще немного новичок в написании скриптов оболочки -- но насколько я понимаю, не должно быть никаких расхождений. Что бы я ни делал, я не могу заставить расширение split %~правильно. Что я пробовал:

# 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~, вы пытаетесь разделить строку, %3~в результате чего получается , %3~и я предполагаю, что она позже присваивается PS1/ PROMPT, который затем расширяется zsh %3~.

Если вы хотите выполнить раскрытие параметров и %3~обработать строку как экранирование подсказки, вы можете использовать флаг раскрытия параметров %следующим образом:${(%)a}

Связанный контент