zsh,分裂扩展%~

zsh,分裂扩展%~

我对此无计可施。我正在使用 zsh 并尝试简单地分割%3~字符的扩展/。这与$(pwd)and的扩展配合得很好$PWD- 两者也是类似路径的字符串。

我正在尝试使用以下代码拆分字符串("${(@s./.)a}")- 其中 a 是a=$(pwd)a=%3~。同样,此代码适用于pwd,但不适用于%3~

我对 shell 脚本还是有点陌生​​——但据我了解,应该没有差异。无论我做什么,我都无法%~正确扩展 的 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}

相关内容