存在するFreeBSD12. 使用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
ある出力は空白文字で区切られ、もう一方の出力はコロン文字で区切られます。
➥なぜこんなに違いがあるのでしょうか?
これは2つの異なる独立変数ですか?それとも、小文字/大文字が私が知らないトリックや意味を引き起こしますか?
これがzsh
特徴ですか?それともFreeBSDの機能ですか?
答え1
これ$path
大量に変数はバンドル到着$PATH
スカラー(文字列)変数。一方の修正は他の修正にも反映されます。
zsh
(with)とは異なり、(t)csh
他の変数を次のよう$PATH
に組み合わせることができます。typeset -T
。必須ではありませんが、慣例に従ってコロンで区切られたスカラーには大文字の名前を使用し、配列には同じ小文字の名前を使用します。コロンはデフォルトの区切り文字ですが、他の区切り文字を使用することもできます(たとえば、複数行の文字列を配列にバインドする改行またはcsv行を配列にバインドするコンマ)
最新バージョンでは、zsh
または2つの変数間typeset -p PATH
のtypeset -p path
リンクが表示されます。
% typeset -p path
typeset -aT PATH path=( /home/chazelas/bin /usr/local/bin /usr/bin /bin )
これは、コンポーネントを追加、削除、または繰り返しやすくするために便利です。
1つを作成してtypeset -U path
要素を作成します。ユニークまた、$PATH
変数をきれいに保つのに役立ちます(tcsh
を使用して同様の結果を得ることができますset -f
)。
完全性のために配列として処理できる 2 つの異なるシェルがありますがfish
、その場合には別の小文字変数を介しません。yash
$PATH
存在するfish
、名前がコロンで終わる変数は、PATH
暗黙的に分割/接続されたリストとして扱われます。だから、set PATH /foo /bar
とはset PATH /foo:/bar
そこで同じです。
からyash
配列を環境にエクスポートすると、コロンで連結された要素を含む環境変数の値が生成されます。だからPATH=(/foo /bar)
そこでやればいいのです。これは、$PATH
起動時に環境からインポートしたときにyash
自動的に配列として作成されません。