5

私の場合、質問に答えるためGNU bash, version 4.3.42(1)-releaseにいくつかのテストを行っています。アイデアは、 - で区切られた文字列とその各要素を配列に分割することです。:

このために、コマンドのスコープでIFStoを設定して、分割が自動で変更されないようにします。:IFS

$ myvar="a:b:c"
$ IFS=: d=($myvar)
$ printf "%s\n" ${d[@]}
a
b
c

そして明らかIFSに同じままです:

$ エコー $IFS
                      # 空の

BASHリファレンスには次のように書かれています:

IFS が設定されていない場合、パラメーターはスペースで区切られます。IFS が null の場合、パラメータはセパレータを介さずに結合されます。

IFSただし、が壊れていることに気付き、代わりにがecho $myvar返されます。a b ca:b:c

値を設定解除すると解決します。

$ unset IFS
$ echo $myvar
a:b:c

しかし、私は疑問に思います: 何が原因なのですか? 実行中のコマンドの範囲だけIFS=: command変更していませんか?IFS

これが実際に機能する単一のステートメントの IFS の設定で確認します。

$ IFS=: eval 'd=($myvar)'
$ echo $myvar
a:b:c

しかし、なぜそれが行われ、行われないのかわかりIFS=: d=($myvar)ません。

4

3 に答える 3