FreeBSD 12では、 zsh
シェルを使用して、$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
1つの出力はSPACE文字で区切られ、もう1つの出力はCOLON文字で区切られます。
➥なぜ違いがあるのですか?
これら2つの異なる変数はありますか?それとも小文字/大文字は私が知らない何らかのトリックや意味を引き起こしますか?
これはzsh
機能ですか?それともFreeBSDの機能ですか?
これは zsh
から継承された csh
/ tcsh
の機能です。
$path
array変数はtiedから$PATH
scalar(文字列)変数。一方の変更は、もう一方にも反映されます。
zsh
では((t)csh
とは逆に)、$PATH
以外の変数を typeset -T
で結合できます。コロンで区切られたスカラーには大文字の名前を使用し、配列には小文字の同じ名前を使用するのが慣例ですが、必須ではありません。コロンがデフォルトのセパレーターですが、他のセパレーターを使用することもできます(たとえば、複数行の文字列を配列に結び付けるには改行、csv行を配列に結び付けるにはカンマ)。
最近のバージョンのzsh
では、typeset -p PATH
またはtypeset -p path
は2つの変数間のリンクを示します。
% typeset -p path
typeset -aT PATH path=( /home/chazelas/bin /usr/local/bin /usr/bin /bin )
これは、コンポーネントの削除やループを簡単に追加できるので便利です。
typeset -U path
を実行して要素を一意にすると、$PATH
変数をクリーンな状態に保つこともできます(tcsh
でset -f
を使用して同様のことを実現できます)。 。