bashでechoした複数行の値を配列に格納する
2020年になっても相変わらずのんびりやっています。
さて、いつも同期に聞かれて知らないものを調べてブログに書いていますが、今回もそれです。
複数行になっているデータを、下のように変数に格納しようとすると
#!/bin/bash data="1 2 3" declare -a array=() echo "$data" | while read line do array+=($line) done echo "${#array[@]}"
$ bash test.sh 0
このように要素数が0個に見えます
配列の追加の下に要素数を見る echo "${#array[@]}"
を追加し確認してみると
$ bash test.sh 1 2 3 0
このように一度は格納されていますね これはパイプの後ろがサブシェルで実行されるので、親側での変数が変化していないため なので、親のシェルで実行されるように
#!/bin/bash data="1 2 3" declare -a array=() while read line do array+=($line) done < <(echo "$data") echo "${#array[@]}"
$ bash test.sh 3
このように標準入力にしてあげるとよいようですね