Bas*_*que 18 zsh array path variable
在FreeBSD 12 中,使用zsh
shell,我在查看$path
(小写)和$PATH
(大写)时注意到了这种差异。
echo $path
Run Code Online (Sandbox Code Playgroud)
/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin /usr/home/freebsd/bin
echo $PATH
Run Code Online (Sandbox Code Playgroud)
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/home/freebsd/bin
一个输出由 SPACE 字符分隔,另一个由 COLON 字符分隔。
? 为什么会有差异?
这是两个不同的独立变量吗?还是小写/大写会触发某种我不知道的技巧或含义?
这是一个zsh
功能吗?还是 FreeBSD 的一个特性?
Sté*_*las 26
所述$path
阵列变量被捆绑到$PATH
标量(字符串)变量。对一个的任何修改都会反映在另一个中。
在zsh
(与 相反(t)csh
)中,您可以将其他变量$PATH
与 联系起来typeset -T
。对以冒号分隔的标量使用大写名称,对数组使用小写的相同名称,这是惯例,但不是强制性的。虽然冒号是默认分隔符,但也可以使用其他分隔符(例如,换行符将多行字符串绑定到数组,或逗号将 csv 行绑定到数组)
在zsh
, typeset -p PATH
or 的最新版本中typeset -p path
显示了两个变量之间的联系:
% typeset -p path
typeset -aT PATH path=( /home/chazelas/bin /usr/local/bin /usr/bin /bin )
Run Code Online (Sandbox Code Playgroud)
这很有用,因为它可以更轻松地添加删除组件或循环遍历它们。
做一个typeset -U path
让元素独特也有助于保持$PATH
变量干净(可以实现类似的东西tcsh
用set -f
)。