Вы перебираете содержимое массива, затем пытаетесь использовать элемент в качестве индекса.Вы должны использовать элемент непосредственно в качестве аргумента:
for i in "${cmd[@]}"
do
a=$(deep status | awk -v my_var="$i" '$0 ~ my_var {print $2 ~ /RUNNING/}')
done
Возможно выполнить итерации по индексам, а затем использовать индекс в ссылке на массив, но это, вероятно, не требуется, если вам не нужно что-то делатьс самими индексами:
for i in "${!cmd[@]}" # Note the "!"
do
echo "$i" # or some other operation using the index
a=$(deep status | awk -v my_var="${cmd[$i]}" '$0 ~ my_var {print $2 ~ /RUNNING/}')
done
Обратите внимание, что нет необходимости передавать grep
в awk
, так как последний может выполнить сопоставление самостоятельно.Я использовал $0
здесь, но вы можете быть более точным, если знаете, какое поле вы пытаетесь сопоставить.
Кроме того, многократное выполнение одной и той же команды в цикле может быть медленным.В зависимости от того, как работает «глубокий статус» и от формата вашего массива, вы можете сделать все это без цикла for
.
и использовать $()
вместо обратных галочек.Они гораздо более читабельны и легче вкладываются.