$PATH vs. $道

Sep 06 2020

理由は思い出せませんが、昔、どういうわけか、両方の変数を設定する必要があることに気づきました。bashでは問題は発生しませんでしたが、zshでは、

export PATH=~/bin:/opt/local/bin:/opt/local/sbin:$PATH export path=$PATH

(.bashrcで使用したものと同じもの)初期化で、

/Users/…/.zshenv:export:7: path: inconsistent type for assignment

「タイプ」とはどういう意味ですか?また、$ pathは何に使用されますか?

回答

8 grg Sep 06 2020 at 04:09

'type'に言及するエラーは、文字列や配列などの変数のデータ型を指します。

$PATHは文字列、$pathは配列です。型が一致しないため、変数またはリテラルのいずれで文字列を、配列を含むように型指定された変数に割り当てることはできません。

2つの変数の違いは次のとおりです。これらは同じフォルダーのリストを表すことを目的としていますが、形式は異なります。$PATH含む/path/to/one:/path/to/twoということ$pathは/path/to/one、の最初の要素がであり、2番目の要素がであるということです/path/to/two。

2つの変数を管理する必要はありません(タイプが一致しないため、一方を他方に割り当てることはできません)—シェルがそれを処理する必要があります。$PATH文字列に追加するだけで、追加するパスはの要素として存在する必要があり$pathます。

これは、zshから継承されたにのみ適用され*cshます。を使用して、2つの変数間の「バインディング」を確認できますtypeset -p PATH。

$path 配列であることは本当に便利です:

  • パスの追加と変更は、文字列操作ではなく、追加などの配列操作で実行できます(途中で編集する場合は分割と結合が必要です)。

  • ループスルーはfor i ($path) { … }、正しい分割文字の設定を処理する必要がないだけです。

3 fd0 Sep 06 2020 at 04:04

PATHはスカラー値です。コロンで区切られた検索パスの連続文字列であり、pathは検索パスの配列です。zshパスとPATHの両方を同期します。あなたがそうする必要はありません。