PATH
zsh 5.8を使用して配列のメンバーを配列として読み取ろうとします。私はBashの使い方に慣れており、通常は次のことができます。
IFS=: p=($PATH)
ただし、zshを使用すると、実際には1つの項目しかない配列が提供されます。書き直すと:
IFS=: p=($(echo $PATH))
その後、正しい数の要素を取得します。なぜそんなことですか?
答え1
これは、zshはPOSIXyシェルとは異なり、デフォルトではパラメータ拡張をトークン化しないためです。コマンドの置換と連携して動作するので、往復でこれを「修正」することができます。ただし、これはまだzshで実行されている正しい操作から離れているため、コマンド置換のecho
組み合わせによってデータが破損する可能性があります。
zsh では$=PATH
トークン化を要求したり、ここで提供されているより適切なソリューションを使用したりできます。bash / zshで ':'文字を使用して文字列を分割する方法は?
また、 の場合、デフォルトではPATH
zshの配列変数にバインドされているので、path
配列としてアクセスするために何もする必要はありません。
IFS=: p=($PATH)
(引用符のない拡張はファイル名の生成やワイルドカードの影響を受けるため、パスにPATH
ワイルドカード(およびその他の文字)が含まれている場合は結果が望む結果ではない可能*?[]
性があります。echo
アイテムを削除します。末尾の改行および(に従ってecho
)バックスラッシュを破ることもできます。