兹什:5.6.2
我使用 archwiki 中的 dirstack:https://wiki.archlinux.org/index.php/zsh#Dirstack
脚本中的所有setopt
s 均已打开,脚本源自~/.zshrc
,
它之前工作并以某种方式将索引更改为0
,afaik zsh 的数组应该从 1 开始。
当前意外输出0
:
dirs -v
0 ~/.cache/downloads/documents
1 ~
2 ~/.cache/zsh
3 ~/.zsh/scripts
尝试 CD
cd -<tab>
0 -- ~/.zsh/scripts
1 -- ~/.cache/zsh
2 -- ~
如果我选择 1 那么它会 cd 到 ~/.zsh/scripts 而不是 ~/.cache/zsh
答案1
后面的~
不是 zsh 数组变量中的索引。看
info zsh 'Filename Expansion'
'~' 本身被 $HOME 的值替换。 '~' 后跟 '+' 或 '-' 分别替换为当前或上一个工作目录。
后跟数字的“~”将替换为目录堆栈中该位置的目录。 '~0'相当于'~+','~1'是栈顶。后跟数字的“~+”将替换为目录堆栈中该位置的目录。 '~+0' 等价于 '~+','~+1' 是栈顶。 '~-' 后面跟的数字被替换为距堆栈底部许多位置的目录。 '~-0' 是堆栈的底部。 PUSHD_MINUS 选项交换“~+”和“~-”的效果,它们后面跟着一个数字。
尽管实际上,除非您启用ksh_arrays
orpushd_minus
选项,否则~1
确实会扩展为与$dirstack[1]
while~0
扩展为相同的内容$PWD
、~-0
与 相同的内容$dirstack[-1]
、~-1
与 相同的内容$dirstack[-2]
。