zsh 将目录拆分为数组

zsh split directory into array

我正在尝试获取一个数组,其中包含 zsh 中的完整当前目录路径。我目前正在使用

local pwd="${PWD/#$HOME/~}"
pwd_list=(${(s:/:)pwd})

除一个问题外,该方法有效,它也将起始 / 视为目录拆分。我希望我的数组像

而不是

我可以看到有两种方法可以做到这一点,但我不知道如何在 zsh 中使用这两种方法。第一个想法是简单地做一个推并强制一个新元素到开头(拆分后)。

第二个是更改拆分以在解析时忽略第一个 /。

我该如何解决这个问题,以最小的开销获得准确的目录路径到数组中?

你真的需要第一个/吗?假设您正在使用脚本来使用其结果,您不能 cd / 从那里开始吗?

总之...这是您想要的吗?

local pwd="${PWD/#$HOME/~}"
pwd_list=(${(s:/:)pwd})
pwd_list=('/' $pwd_list)

我觉得你的想法有点不对。如果在“/”上拆分“/usr/lib/php”,您应该得到四个元素,第一个是空字符串。如果您将这些数组元素与“/”重新连接在一起,您将获得原始路径。尝试考虑“/”的第一个元素意味着您对拆分的处理不一致,这将使其他一切变得更加困难。

所以问题真的是你只得到三个元素而不是四个:第一个空元素被删除了。您可以通过引用来解决这个问题,如下所示:

local pwd="${PWD/#$HOME/~}"
pwd_list=( "${(s:/:)pwd}" )

(外括号旁边的额外 space 不是必需的,但它使它更容易阅读。)您甚至可以将其组合成一个表达式:

pwd_list=( "${(s:/:)${PWD/#$HOME/~}}" )