我有以下bash脚本序列:
blocks=()
for line in ${fail_no[@]}
do
new_line=`sed "$line!d" $1`
command=`echo $new_line | cut -d ',' -f2`
while [[ $new_line != *"$PROJ_NAME"* ]]
do
line=$((line-1))
new_line=`sed "$line!d" $1`
done
curr_block=`echo $new_line | cut -d ',' -f1`
echo $curr_block
blocks+=("$curr_block")
done
echo $blocks
请忽略详细信息,但我只想将curr_block
的所有值添加到列表blocks
中。当我运行此脚本时,我有curr_block
的2个值,但最后的block
变量只包含第一个curr_block
的值,而不包含第二个{或者之后的值{1}}是这样的)。我一直在看这个1小时,我看不出问题出在哪里。
答案 0 :(得分:2)
blocks
是一个数组。使用echo $blocks
将打印第一个元素(如您所见)。
打印数组所有元素的正确方法如下:
echo "${blocks[@]}"
答案 1 :(得分:2)
我会用这样的东西:
readarray -t blocks < <(
awk -F, -v pname "$PROJ_NAME" '
BEGIN { fail=('"${fail_no[*]}"'); }
$0 ~ pname {block=$1};
NR in fail { print $block; }
' "$1")
单个awk
进程逐行遍历文件,如果遇到与列出的一行匹配的行,则始终记住block
的当前值的内容在fail_no
。如果是,输出该块。然后将awk
的输出收集到所需的数组中。