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循环内的列表中的主要内容,如果未能解决你的问题,请参考以下文章

通过for循环将值附加到向量不起作用

如何在使用while循环时将值附加到字典中的列表?

如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?

循环遍历节点并使用 XSLT 将值附加到字符串

使用变量作为列表名称附加到循环内的列表

将每个 seaborn 图形附加到 for 循环内的 PDF