文字列が与えられたら、各フィールドを配列要素にfoo
保存したいと思います。私は以前のバージョンのbashと互換性のあるコマンドや他のコマンドを使ってこれをしたかったのですが、そうではありませんでした。\n
bar
read
readarray
私は次のコマンドを試しました。
IFS=$'\n' read -d '' -r -a bar <<< "$foo"
ただし、エラーコード1のみが返されます。
私が望むことを達成するために使用できるコマンドはありますか?これを繰り返し実行できることはわかっていますが、1つのコマンドで行うことをお勧めします。
ベストアンサー1
read
文字列に区切り文字がないため、1を返します。しかし、配列は埋められます。
$ echo "$BASH_VERSION"
3.2.57(1)-release
$ foo=$'one\ntwo\nthree\nfour'
$ IFS=$'\n' read -d '' -r -a bar <<<"$foo"
$ echo $?
1
$ declare -p bar
declare -a bar='([0]="one" [1]="two" [2]="three" [3]="four")'
空でない区切り文字を使用すると、ゼロ以外の結果が生成されます。
$ unset bar
$ IFS=$'\n' read -d "\034" -r -a bar <<<"${foo}\034"
$ echo $?
0
$ declare -p bar
declare -a bar='([0]="one" [1]="two" [2]="three" [3]="four")'
8進数34はASCII「ファイル区切り記号」文字です。できないあなたのデータに表示されます。