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

在BASH中使用嵌套for循环实现2×3×6变量遍历匹配ROI命名

问题修复方案

错误原因

你原本的三层嵌套循环会对「2个半球 * 3个ROI * 6个输入文件」做全量笛卡尔积遍历,没有绑定ROI编号和对应文件的映射规则,必然会出现ROI和文件不匹配的问题。

正确实现

仅需两层循环即可通过编号绑定映射关系,无需三层遍历:

for a in Left_hemi Right_hemi; do
    # 提取半球标识转大写,匹配你预设的变量后缀LEFT/RIGHT
    hemi_suffix=${a%%_*}
    hemi_suffix=${hemi_suffix^^}
    for roi_num in {1..3}; do
        # 动态拼接变量名,间接获取对应输入文件路径
        file_varname="file${roi_num}_${hemi_suffix}"
        current_file=${!file_varname}
        roi_name="ROI${roi_num}"
        # 执行配准命令,已补全你遗漏的-o输出参数
        antsApplyTransforms -d 3 -i "${current_file}" -o "${dir_out}/warped_atlas/${a}_${roi_name}_${subject}.nii.gz"
        echo "${a}_${roi_name}_${subject}.nii.gz"
    done
done

单行压缩版

如果你需要把逻辑合并为一行执行,直接把换行替换为分号即可:

for a in Left_hemi Right_hemi; do hemi_suffix=${a%%_*}; hemi_suffix=${hemi_suffix^^}; for roi_num in {1..3}; do file_varname="file${roi_num}_${hemi_suffix}"; current_file=${!file_varname}; roi_name="ROI${roi_num}"; antsApplyTransforms -d 3 -i "${current_file}" -o "${dir_out}/warped_atlas/${a}_${roi_name}_${subject}.nii.gz"; echo "${a}_${roi_name}_${subject}.nii.gz"; done; done

注意事项

  • 以上代码依赖Bash 4.0及以上版本的间接变量扩展、大小写转换语法
  • 请自行补充antsApplyTransforms命令中你省略的参考影像、变换场文件等其他必填参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:24:05