Ответ на вопрос
Как хранить строки в массиве?
С Bash≥4, использовать mapfile
следующим образом:
mapfile -t array < <(echo "v1.33.4" | egrep -o '[0-9]{1,3}')
С Bash < 4, использовать цикл:
array=()
while read; do
array+=("$REPLY")
done < <(echo "v1.33.4" | egrep -o '[0-9]{1,3}')
или, используя один read
заявление:
IFS=$'\n' read -r -d '' -a array < <(echo "v1.33.4" | egrep -o '[0-9]{1,3}')
(но обратите внимание, что возврат код 1
).
Ответ решить (что я считаю) действительную проблему:
У вас есть переменная, где хранится строка v1.33.4
и вы хотите массив, который будет содержать число 1
, 33
и 4
: используйте следующее:
string=v1.33.4
IFS=. read -ra array <<< "${string#v}"
Для этого вам не нужны внешние утилиты.
Другая возможность (которая также будет проверять формат строки, так что я бы сказал, что это лучший вариант для вас), чтобы использовать регулярное выражение:
string=v1.33.4
if [[ "$string" =~ ^v([[:digit:]]+)\.([[:digit:]]+)\.([[:digit:]]+)$ ]]; then
array=("${BASH_REMATCH[@]:1}")
else
echo >&2 "Error, bad string format"
exit 1
fi
Затем к петле на поля массива:
for field in "${array[@]}"; do
echo "$array"
done
'array = ($ (command))' – 123