簡體   English   中英

Bash將值追加到for循環內的列表中

[英]Bash append values to a list inside a for loop

我有以下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 當我運行此腳本時,我有2個curr_block值,但最后的block變量僅包含第一個curr_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的輸出收集在所需的數組中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM