在FreeBSD 12 中,使用zsh
shell 时,我注意到$path
(小写)与$PATH
(大写)的差异。
echo $path
/sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin /usr/home/freebsd/bin
echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/home/freebsd/bin
一个输出由空格字符分隔,另一个由冒号字符分隔。
➥ 为什么不同?
这是两个不同的独立变量吗?还是小写/大写会触发某种我不知道的技巧或含义?
这是一个zsh
功能吗?还是 FreeBSD 的一个特性?
这是
zsh
继承自csh
/的一个特征tcsh
。$path
数组变量与标量(字符串)变量相关联。对一个的任何修改都会反映在另一个上。$PATH
在
zsh
(与 相反(t)csh
)中,您可以将其他变量与 绑定$PATH
在一起typeset -T
。对冒号分隔的标量使用大写名称,对数组使用小写的相同名称是常规的,但不是强制性的。虽然冒号是默认分隔符,但可以使用其他分隔符(例如,换行符将多行字符串绑定到数组,或逗号将 csv 行绑定到数组)在最新版本的
zsh
,typeset -p PATH
ortypeset -p path
中显示了两个变量之间的联系:这很有用,因为它可以更轻松地添加删除组件或循环它们。
做 a
typeset -U path
使元素独一无二也有助于保持$PATH
变量清洁(类似的东西可以在tcsh
with中实现set -f
)。