嵌套在bash中的for循环中,其中代码对循环中的每个项目执行不同的操作

问题描述

我有10个目录(MDD1,MDD2,MDD3,MDD4,MDD5,OCD1,OCD2,OCD3,OCD4,OCD5),每个目录都有一个映像(lesion_right_warped.nii.gz)。我正在尝试编写将每个图像乘以预先指定的值{88,-8.7,-33.3,20,-43,4,-7,27,82}的代码-即乘以MDD1 / lesion_right_warped .nii.gz乘88,MDD2 / lesion_right_warped.nii.gz乘-8.7,依此类推。我的下面的代码无法正常工作,因为它最终最终只会将所有图像乘以82(它遍历每个值并覆盖上一个)。

#!/bin/bash
for i in *;    
do
    for j in {88,-8.7,-33.3,20,-43,4,-7,82}; 
    do
          fslmaths $i/lesion_right_warped.nii.gz -mul $j $i/lesion_right_response.nii.gz
    done
done

任何建议将不胜感激! 谢谢!

解决方法

您可以准备两个数组,然后使用共享索引:

dirs=(*)
factors=(88 -8.7 -33.3 0 20 -43 4 -7 27 82)

# Make sure both have the same number of elements
((${#dirs[@]} != ${#factors[@]})) && exit 1

for ((i = 0; i < ${#dirs[@]}; ++i)); do
    fslmaths "${dirs[i]}/lesion_right_warped.nii.gz" \
        -mul "${factors[i]}" "${dirs[i]}/lesion_right_response.nii.gz"
done