Не могли бы вы попробовать следующее.
arr=($(awk '/background/ && match($0,/\".*\"/){print substr($0,RSTART+1,RLENGTH-2)}' Input_file))
OR to use a variable's value for awk as an input then try following.
arr=($(echo "$VAR" | awk '/background/ && match($0,/\".*\"/){print substr($0,RSTART+1,RLENGTH-2)}'))
Чтобы напечатать значения массива, попробуйте затем выполнить следующее.
for i in "${arr[@]}"
do
echo "$i"
done
Или распечатать в правильном значении индекса элемента тоже с печатью массиваЗначение попробуйте следующее.
count=0
for i in "${arr[@]}"
do
echo "arr["$count"]=$i"
count=$((count + 1))
done
РЕДАКТИРОВАТЬ: Поскольку OP говорит, что между значениями может быть пробел.Таким возможным решением для этого может быть печать значений из команды awk
с новым символом между значениями (который будет работать как разделитель полей для итераций массива BASH), я взял %
, поэтому при запуске команды awk она выдастследует (используя тестовые значения в выводе, показанном здесь)
awk '/background/ && match($0,/\".*\"/){val=val?val "%" substr($0,RSTART+1,RLENGTH-2):substr($0,RSTART+1,RLENGTH-2)} END{print val}' Input_file
singh:test/ bla_bla_bla%singh:bla1/bla2
Запустите следующую команду, чтобы создать массив с именем arr
.
arr=($(awk '/background/ && match($0,/\".*\"/){val=val?val "%" substr($0,RSTART+1,RLENGTH-2):substr($0,RSTART+1,RLENGTH-2)} END{print val}' Input_file))
Теперь, если мы установим IFS='%'
и запустим следующеекоманда.
echo "${arr[0]}"
singh:test/ bla_bla_bla
echo "${arr[1]}"
singh:bla1/bla2
Так как он принял новый разделитель как %
, поэтому он НЕ сломает значения, для которых есть пробел.