我对此无计可施。我正在使用 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}