web-dev-qa-db-ja.com

zshを使用した$ pathと$ PATH(小文字と大文字)の違いは何ですか?

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の機能ですか?

13
Basil Bourque

これは zsh から継承された csh / tcsh の機能です。

$patharray変数はtiedから$PATHscalar(文字列)変数。一方の変更は、もう一方にも反映されます。

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変数をクリーンな状態に保つこともできます(tcshset -fを使用して同様のことを実現できます)。 。

20