スペース区切りの文字列を含む変数があります。
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})
同じ結果になります。誰かが助けてもらえますか?
文字列を配列に変換するには、
arr=($line)
または
read -a arr <<< $line
これがトリックをするので引用符を使用しないことは重要です。
これを試して:
arr=(`echo ${line}`);
arr=( $line )
にあります。 「分割」は「グロブ」に関連付けられています。
ワイルドカード(*
、?
、および[]
)は、一致するファイル名に展開されます。
正しい解決方法はもう少し複雑です。
IFS=' ' read -a arr <<< "$line"
グロビング問題はありません。分割文字は$IFS
に設定され、変数は引用符で囲まれます。
パラメータ展開が必要な場合は、次のことを試してください。
eval "arr=($line)"
たとえば、次のコードを取ります。
line='a b "c d" "*" *'
eval "arr=($line)"
for s in "${arr[@]}"; do
echo "$s"
done
現在のディレクトリにファイルa.txt
、b.txt
およびc.txt
が含まれている場合、コードを実行すると次のような出力が生成されます。
a
b
c d
*
a.txt
b.txt
c.txt