私の場合、質問に答えるためGNU bash, version 4.3.42(1)-release
にいくつかのテストを行っています。アイデアは、 - で区切られた文字列とその各要素を配列に分割することです。:
このために、コマンドのスコープでIFS
toを設定して、分割が自動で変更されないようにします。:
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 c
a: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)
ません。