1. ホーム

[解決済み】Bashでスペースで区切られた文字列を配列に読み込む

2022-04-01 23:04:07

質問

スペースで区切られた文字列を格納する変数があります。

line="1 1.50 string"

その文字列をスペースをデリミターとして分割し、結果を配列に格納したいのですが、以下のようになります。

echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}

出力

1
1.50
string

どこかで、うまくいかない解決策を見つけました。

arr=$(echo ${line})

この後、上のecho文を実行すると、こうなります。

1 1.50 string
[empty line]
[empty line]

また、私は

IFS=" "
arr=$(echo ${line})

を実行しても、同じ結果になります。誰か助けてください。

解決方法は?

文字列を配列に変換するには、文字列から配列を作成し、文字列を IFS (Internal Field Separator)変数で、デフォルトではスペース文字になっています。

arr=($line)

の標準入力に文字列を渡すか、あるいは read コマンドを使用して ここ ( <<< ) 演算子を使用します。

read -a arr <<< "$line"

最初の例では、重要なのは ではなく を引用符で囲むことで $line これは、文字列が複数の要素に分割されることを可能にするものだからです。

こちらもご覧ください。 https://github.com/koalaman/shellcheck/wiki/SC2206