cmd
是一个数组,我想grep
每个索引:
for i in "${cmd[@]}";
do
a=`deep status | grep "${cmd[$i]}" | awk '{print $2 ~ /RUNNING/}'
但这不起作用a
应该包含1
或0
,但是我没有任何处理:
cmd[@]: ERROR (no such process)
答案 0 :(得分:1)
您要遍历数组的内容,然后尝试将元素用作索引。您需要直接使用元素作为参数:
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
循环就可以完成全部操作。
并使用$()
代替反引号。它们更具可读性,更易于嵌套。