Zsh, dividiendo la expansión de %~

Zsh, dividiendo la expansión de %~

Estoy al límite de mi ingenio con esto. Estoy usando zsh e intento simplemente dividir la expansión del %3~personaje /. Esto funciona bien con la expansión de $(pwd)y $PWD, las cuales también son cadenas en forma de ruta.

Estoy intentando dividir una cadena usando el siguiente código ("${(@s./.)a}"), donde a es a=$(pwd)o a=%3~. Nuevamente, este código funciona con pwd, pero no %3~.

Todavía soy un poco nuevo en los scripts de shell, pero hasta donde yo lo entiendo, no debería haber discrepancia. No importa lo que haga, no puedo lograr que la expansión %~se divida correctamente. Cosas que he probado:

# 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

De hecho, estoy empezando a pensar que zsh es intencionalmente inconsistente. Aunque estoy seguro de que me estoy perdiendo algo. También lo intenté ("${(ps./.)a}"), porque según lo leí debería hacer lo mismo. También probé la división basada en IFS, configurando IFS="/". Nuevamente, funciona para cadenas normales; no funciona para cadenas %~.???

EDITAR: Para completar, esto se encuentra dentro de un archivo de tema .zsh donde. ¿Supongo que tal vez esto importe? Técnicamente no soy yo quien lo ejecuta (lo está ejecutando oh-my-zsh), por lo que tal vez algo extraño esté sucediendo en ese nivel.

Respuesta1

Está intentando utilizar un escape de solicitud fuera del contexto donde normalmente se evalúan los escapes de solicitud. entonces la variable contiene la cadena %3~, intenta dividir la cadena %3~resultante %3~y supongo que luego se asigna a PS1/ PROMPTque luego zsh se expande %3~.

Si desea realizar expansiones de parámetros y que la cadena %3~se trate como un mensaje de escape, puede usar el indicador de expansión de parámetros %de esta manera.${(%)a}

información relacionada