PATHに改行文字を含めることはできますか?

PATHに改行文字を含めることはできますか?

私たちが知っているように、パスにはすべてのコンポーネントに改行文字を含めることができます。

$PATHそれでは、環境変数に改行文字を含めることができると結論付けるべきですか?

$PATHそれでは、Bourne likeのように要素にどのように分割できますか?

    IFS=':' ; set -f
    for var in $PATH
    do
        echo "<$var>"
    done

ただし、IFSを変更せずに実行できる場合は、より良いでしょう。

ベストアンサー1

POSIX シェルには$IFSフィールドがあります。区切り記号、区切り文字の代わりにこれら$PATHの値は、空の文字列(現在のディレクトリを表す)の代わりに分割され/bin:/usr/bin:ます。以下を行う必要があります。/bin/usr/bin/bin/usr/bin

IFS=:; set -o noglob
for var in $PATH""; do
  printf '<%s>\n' "$var"
done

グローバル設定の変更を防ぐために、明示的な分割演算子でシェルを使用できますzsh。たとえば、次のようになります。

for var in "${(s/:/@)PATH}"; do
  printf '<%s>\n' "$var"
done

この場合、配列はzshすでに$path/にバインドされているため、$PATH次のようになります。cshtcsh

for var in "$path[@]"; do
  printf '<%s>\n' "$var"
done

とにかく、そうです。理論的には、$PATHすべての変数に改行文字を含めることができるように、改行文字はファイルパスの解析では特別ではありません。私は、識別可能な人が名前$PATHに改行(またはワイルドカード)を含むディレクトリを置くか、改行を含むコマンド名を指定することを期待していません。$PATH改行が含まれていないと仮定するスクリプトを誰かが利用できるシナリオも想像するのは難しいです。

おすすめ記事