44

<<<次のコード ブロック内のbash の 3 桁未満の演算子 , は何を意味しますか?

LINE="7.6.5.4"
IFS=. read -a ARRAY <<< "$LINE"
echo "$IFS"
echo "${ARRAY[@]}"

また、なぜ は$IFSピリオドではなくスペースのままなのですか?

4

3 に答える 3

31

文字列をコマンドの stdin にリダイレクトします。

この方法でコマンドの直前に割り当てられた変数は、コマンド プロセスに対してのみ有効です。シェルはそのままです。

于 2011-10-31T05:38:09.487 に答える
11

からman bash

Here Strings here ドキュメントの変形で、形式は次のとおりです。

     <<<word

単語は展開され、標準入力でコマンドに提供されます。

IFS 行のは、bash.と同等です。source

更新:man bash(gsklee、seheに感謝)からの詳細

IFS 展開後の単語分割、およびread 組み込みコマンドで行を単語に分割するために使用される内部フィールド セパレータ 。デフォルト値は " <space><tab><new‐line>" です。

からさらにman bash

上記の PARAMETERS で説明されているように、単純なコマンドまたは関数の環境は、パラメーターの割り当てを前に付けることで一時的に拡張できます。これらの代入ステートメントは、そのコマンドによって表示される環境のみに影響します。

于 2011-10-31T05:44:20.877 に答える
3

IFS が設定されていない理由は、bash がそれを別のコマンドとして認識していないためです。コマンドを終了するには、コマンドの後に改行またはセミコロンを付ける必要があります。

$ cat /tmp/ifs.sh
LINE="7.6.5.4"
IFS='.'  read -a ARRAY <<< "$LINE"
echo "$IFS"
echo "${ARRAY[@]}"

$ bash /tmp/ifs.sh 


7 6 5 4

しかし

$ cat /tmp/ifs.sh 
LINE="7.6.5.4"
IFS='.';  read -a ARRAY <<< "$LINE"
echo "$IFS"
echo "${ARRAY[@]}"

$ bash /tmp/ifs.sh 
.
7 6 5 4

ただし、最初の方法で構文エラーにならなかった理由はわかりません。

于 2011-10-31T12:31:38.567 に答える