Arrays zsh将目录拆分为数组

Arrays zsh将目录拆分为数组,arrays,zsh,Arrays,Zsh,我正在尝试获取一个数组,其中包含zsh中完整的当前目录路径。我目前正在使用 local pwd="${PWD/#$HOME/~}" pwd_list=(${(s:/:)pwd}) 除了一个问题外,它还将起始/视为目录拆分。我希望我的数组是 / usr 解放党 php 而不是 usr 解放党 php 我可以看到两种方法,但我不知道如何在zsh中做到这一点。第一个想法是简单地做一个推送,并在拆分后将新元素强制到开头 第二种方法是在解析时更改拆分以忽略第一个/时 我如何解决这个问题,以最小的开销在数

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

local pwd="${PWD/#$HOME/~}"
pwd_list=(${(s:/:)pwd})
除了一个问题外,它还将起始/视为目录拆分。我希望我的数组是

/ usr 解放党 php 而不是

usr 解放党 php 我可以看到两种方法,但我不知道如何在zsh中做到这一点。第一个想法是简单地做一个推送,并在拆分后将新元素强制到开头

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


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

您真的需要第一个路径吗?假设您正在使用一个脚本来使用结果,您就不能从这里开始吗

无论如何。。。这是你想要的吗

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

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

无论如何。。。这是你想要的吗

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

我认为你的想法有点错误。如果在/上拆分/usr/lib/php,应该得到四个元素,其中第一个是空字符串。如果将这些数组元素与/重新连接在一起,则得到原始路径。试着去想/的第一个要素意味着你对待分裂的方式不一致,这会让其他事情变得更加困难

所以问题是你只得到了三个元素而不是四个:第一个空元素被删除了。您可以通过引用以下内容来解决此问题:

local pwd="${PWD/#$HOME/~}"
pwd_list=( "${(s:/:)pwd}" )
外圆括号旁边的额外空间是不必要的,但它使它更容易阅读。您甚至可以将其组合到一个表达式中:

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

我认为你的想法有点错误。如果在/上拆分/usr/lib/php,应该得到四个元素,其中第一个是空字符串。如果将这些数组元素与/重新连接在一起,则得到原始路径。试着去想/的第一个要素意味着你对待分裂的方式不一致,这会让其他事情变得更加困难

所以问题是你只得到了三个元素而不是四个:第一个空元素被删除了。您可以通过引用以下内容来解决此问题:

local pwd="${PWD/#$HOME/~}"
pwd_list=( "${(s:/:)pwd}" )
外圆括号旁边的额外空间是不必要的,但它使它更容易阅读。您甚至可以将其组合到一个表达式中:

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

抱歉耽搁了,我没有收到通知,奇怪。我之所以希望这样做,是因为我正在使用数组来运行脚本,一些用于解析目录路径,另一些用于向用户显示数据。不幸的是,如果发生$HOME to-~替换,这将导致错误的结果:结果将是/~foo bar。很抱歉,我没有收到通知,很奇怪。我之所以希望这样做,是因为我正在使用数组来运行脚本,一些用于解析目录路径,另一些用于向用户显示数据。不幸的是,如果发生$HOME to-~替换,这将导致错误:结果将是/~foo bar。