Это не будет работать с вашим синтаксисом. Вы не заполняете массив результатом grep
. Вы не обрабатываете строку, переданную по каналу, и не заполняете пустой массив на полученном конце канала.
Возможно, вы намеревались сделать
array=($(echo v1.33.4 | egrep -o '[0-9]{1,3}'))
Обратите внимание, как echo
строки передается на стандартный ввод egrep
, который отсутствовал при вашей попытке.
Но, как и в связанном ответе, использование mapfile
было бы лучшим вариантом здесь, потому что при вышеуказанном подходе, если результаты поиска содержат слова, содержащие пробелы, они будут храниться в отдельных индексах в массиве, а не в одном .
mapfile -t array < <(echo "v1.33.4" | egrep -o '[0-9]{1,3}')
printf '%s\n' "${array[@]}"
Обратите внимание, что расширение массива в bash
принимает синтаксис "${array[@]}"
, а не просто простое расширение "${array}"
.