Bash でスペース区切りの文字列を配列に読み込むにはどうすればよいでしょうか? 質問する

Bash でスペース区切りの文字列を配列に読み込むにはどうすればよいでしょうか? 質問する

スペースで区切られた文字列を含む変数があります:

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})

結果は同じです。誰か助けてくれませんか?

ベストアンサー1

文字列を配列に変換するには、文字列から配列を作成し、IFSデフォルトではスペース文字である (内部フィールド区切り文字) 変数に従って文字列が自然に分割されるようにします。

arr=($line)

readまたは、コマンドの標準入力に文字列を渡すには、ヒアストリング( <<<) 演算子:

read -a arr <<< "$line"

最初の例では、引用符を使用しないことが重要です。引用符を使用$lineすると、文字列が複数の要素に分割される可能性があるためです。

参照:https://github.com/koalaman/shellcheck/wiki/SC2206

おすすめ記事