Bash将值附加到for循环内的列表中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash将值附加到for循环内的列表中相关的知识,希望对你有一定的参考价值。
我有以下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小时,我看不出问题出在哪里。
答案
blocks
是一个阵列。使用echo $blocks
将打印第一个元素(如您所见)。
打印数组的所有元素的正确方法如下:
echo "${blocks[@]}"
另一答案
我会用这样的东西:
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
的输出收集在所需的阵列中。
以上是关于Bash将值附加到for循环内的列表中的主要内容,如果未能解决你的问题,请参考以下文章