Estou perdendo o juízo com isso. Estou usando zsh e tentando simplesmente dividir a expansão do %3~
personagem /
. Isso funciona bem com a expansão de $(pwd)
e $PWD
- ambos também são strings semelhantes a caminhos.
Estou tentando dividir uma string usando o seguinte código ("${(@s./.)a}")
- onde a é a=$(pwd)
ou a=%3~
. Novamente, este código funciona com pwd
, mas não %3~
.
Ainda sou um pouco novo em scripts de shell - mas, pelo que entendi, não deve haver discrepância. Não importa o que eu faça, não consigo %~
dividir a expansão corretamente. Coisas que tentei:
# 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
Na verdade, estou começando a pensar que zsh é intencionalmente inconsistente. Tenho certeza de que estou perdendo alguma coisa, no entanto. Eu também tentei ("${(ps./.)a}")
, porque conforme li, deveria fazer o mesmo. Eu também tentei divisão baseada em IFS, configuração IFS="/"
. Novamente, funciona para strings normais - não funciona para %~
.???
EDITAR: Para fins de integridade, isso está dentro de um arquivo .zsh-theme onde. Suponho que talvez isso importe? Tecnicamente, não sou eu quem o executa (está sendo executado por oh-my-zsh), então talvez algo estranho esteja acontecendo nesse nível.
Responder1
Você está tentando usar um escape de prompt fora do contexto onde os escapes de prompt são normalmente avaliados. então a variável contém a string %3~
, você tenta dividir a string %3~
resultante %3~
e estou assumindo que ela será posteriormente atribuída a PS1
/ PROMPT
qual zsh então se expande %3~
.
Se você quiser realizar expansões de parâmetros e ter a string %3~
tratada como um prompt de escape você pode usar o sinalizador de expansão de parâmetros %
da seguinte forma${(%)a}