首页 > 解决方案 > bash中具有多个条件的for循环

问题描述

首先,我已经阅读了Bash 脚本中具有多个条件的循环问题,但它不适用于我打算做的事情。在以下脚本中,第一个 for 循环将f个数组分配给一对变量(CON_PERC 和 CON_NAME

f=0
for i in "${container[@]}"; do
CON_PERC[$f]=$(awk '{print int($2+0)}' <<< ="${container[$f]}") #CON_PERC[0] = 2; CON_PERC[1] = 0
CON_NAME[$f]=$(awk '{print $1}' <<< "${container[$f]}") #CON_NAME[0] = hi; CON_NAME[1] = bye
((f++))
done

我现在需要做的是在一个单独的循环中,检查两个变量的每个数组并打印它们。最好的方法是什么?

我强硬是这样的

e=0
for ((x in "$CON_PERC[@]" && z in "$CON_NAME[@]")); do
echo "${CON_NAME[$e]}  ${CON_PERC[$e]}"
((e++))
done

但似乎for ((i in "$CON_PERC[@]" && e in "$CON_NAME[@]"))在 bash 中无效。

问题是,解决这个问题的最佳方法是什么,我应该专门使用嵌套循环还是其他方式?

标签: bashfor-loopmultiple-conditions

解决方案


您需要像这样嵌套它们(在您的示例中未经测试)

for x in "$CON_PERC[@]";
  do
  for z in "$CON_NAME[@]";
  do
    echo ${CON_NAME[$e]}  ${CON_PERC[$e]}
    ((e++))
  done
done

例如:

for x in {a..b};
do
  for y in {c..d};
  do
    echo $x $y
  done
done

结果:

a c
a d
b c
b d

推荐阅读