改行文字で文字列を分割し、読み取りを使用して配列に書き込みます。

改行文字で文字列を分割し、読み取りを使用して配列に書き込みます。

文字列が与えられたら、各フィールドを配列要素にfoo保存したいと思います。私は以前のバージョンのbashと互換性のあるコマンドや他のコマンドを使ってこれをしたかったのですが、そうではありませんでした。\nbarreadreadarray

私は次のコマンドを試しました。

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「ファイル区切り記号」文字です。できないあなたのデータに表示されます。

おすすめ記事