You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux Shell中如何在for循环中使用两个变量批量执行脚本

在Bash中用单个循环处理多组关联变量的方案

根据你的需求,这里提供几种简洁且易维护的实现方式,替代原来的多个独立for循环:

方法1:使用关联数组(推荐)

这种写法直接对应你给出的表格映射关系,逻辑清晰,后期修改数据也更方便:

# 定义关联数组,键为red-file,值为对应的aft列表
declare -A aft_map=(
  ["cla164"]="16 19 65 77"
  ["cla166"]="23 36 93"
  ["cla179"]="26 43"
  ["cla180"]="22 36 40"
)

# 外层循环遍历所有red-file,内层循环处理对应的每个aft值
for red_file in "${!aft_map[@]}"; do
  for i in ${aft_map[$red_file]}; do
    sh cacul.aft.sh --aftfile "/path/folder/aft${i}" --red-file "${red_file}.input" --out "/path/folder/re/${red_file}.aft${i}"
  done
done

方法2:改进双数组方案

你之前尝试的双数组写法本身是有效的,只要两个数组的索引一一对应即可:

var1=("164" "164" "164" "164" "166" "166" "166" "179" "179" "180" "180" "180")
var2=("16" "19" "65" "77" "23" "36" "93" "26" "43" "22" "36" "40")

for ((i=0; i<${#var1[@]}; i++)); do
  sh cacul.aft.sh --aftfile "/path/folder/aft${var2[$i]}" --red-file "cla${var1[$i]}.input" --out "/path/folder/re/cla${var1[$i]}.aft${var2[$i]}"
done

注:这种方式适合数据固定的场景,但数据量较大时,手动维护两个数组容易出错。

方法3:按行读取数据(无需数组)

如果不想使用数组,可以通过here-doc定义数据,逐行处理:

while read -r red_file aft_list; do
  for i in $aft_list; do
    sh cacul.aft.sh --aftfile "/path/folder/aft${i}" --red-file "${red_file}.input" --out "/path/folder/re/${red_file}.aft${i}"
  done
done << EOF
cla164 16 19 65 77
cla166 23 36 93
cla179 26 43
cla180 22 36 40
EOF

内容的提问来源于stack exchange,提问作者mashimena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:42:43