Ответ 1
Чтобы назначить вывод команды массиву, вам нужно использовать подстановку команд внутри присвоения массива. Для общей команды command
выглядит следующим образом:
arr=( $(command) )
В примере OP это будет выглядеть так:
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
Внутренний $()
запускает команду, в то время как external ()
заставляет вывод быть массивом. Проблема заключается в том, что он не будет работать, если выходные данные команды содержат пробелы. Чтобы справиться с этим, вы можете установить IFS
на \n
.
IFS=$'\n'
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
unset IFS
Вы также можете исключить необходимость использования sed, выполнив расширение для каждого элемента массива:
arr=($(grep -n "search term" file.txt))
arr=("${arr[@]%%:*}")