Ответ 1
arr=($line)
или
read -a arr <<<$line
У меня есть переменная, которая содержит строку с разделителями-пробелами:
line="1 1.50 string"
Я хочу разбить эту строку с пробелом как разделителем и сохранить результат в массиве, чтобы следующее:
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}
выходы
1
1.50
string
Где-то я нашел решение, которое не работает:
arr=$(echo ${line})
Если после этого я запустил вышеприведенные выражения эха, я получаю:
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
, цитируемые переменные.
line="1 1.50 string"
arr=$( $line | tr " " "\n")
for x in $arr
do
echo "> [$x]"
done