Shell script内部フィールド区切り記号(IFS)


何によって各データを区分しますか:IFSIFS(Internal Field Separator)は、フィールド区切り記号として使用されるbash Shellの文字リストを定義する特殊な環境変数です.
既定値は빈 칸です.
したがって、statesファイルの内容を以下に示すように作成します.
$ cat states
A
B
C
D
E
F G
H I J
次のスクリプトを実行すると、異なる結果値が表示されます.
$ cat test1
#!/bin/bash
for test in $(cat states)
do
        echo "word: $test"
done

$ ./test1
word: A
word: B
word: C
word: D
word: E
word: F
word: G
word: H
word: I
word: J
最終的には줄바꿈を基準に区分します.
環境変数IFS'\n'に変更すればよい.
$ cat test1
#!/bin/bash
IFS_OLD=$IFS
IFS=$'\n'
for test in $(cat states)
do
        echo "word: $test"
done
IFS=$IFS_OLD

$ ./test1
word: A
word: B
word: C
word: D
word: E
word: F G
word: H I J
TIP
上のスクリプトには유용한 트릭があります.IFSの値のみが戻されずに変更された場合、この値はに設定されます.
他のスクリプトを作成する場合は、フィールド区切り文字がデフォルト値であると判断して実行を続行した場合、結果は失敗します.
したがって、既存のIFS値をIFS_OLDに保存し、IFSを変更して既存の値に戻すことができる.

各種フィールド区切り記号


フィールド区切り文字にはタイプ制限はありません.
次に、一般的なフィールド区切り記号を示します.
タイプ別に「n」を改行して区別する:コロンで区別する;セミコロンで区切る「大引用符で区切る......'\n'の場合のみ、$として指定されます.
その他のフィールド区切り記号は、IFS=$'\n'、例えばIFS=:として指定される.

複数のフィールド区切りを同時に適用

$'\n':;"をフィールド区切り記号として一度に適用する場合は、次のように変数を割り当てることができます.
IFS=$'\n':;"