为什么 for 循环不会执行超过 4 次迭代?

为什么 for 循环不会执行超过 4 次迭代?

在下面的脚本中,for 循环仅输出到 unph4。我尝试直接写入 $coils 的值,但效果不佳。我尝试了其他迭代值,发现我得到的最大值是 9(迭代数必须是一位数字吗?)

coil=34;

bash_command = sprintf(['for ph in all/ph[1-$coil].nii\n' ...
'do\n' ...
'   base=`basename $ph`;\n' ...
'   dir=`dirname $ph`;\n' ...
'   mag=$dir/"mag"${base:2};\n' ...
'   unph="unph"${base:2};\n' ...
'   prelude -a $mag -p $ph -u $unph -n 12&\n' ...
'done\n' ...
'wait\n' ...
'gunzip -f unph*.gz\n']);

unix(bash_command);

答案1

因为all/ph[1-34].nii最多匹配 4 个文件:all/ph1.niiall/ph2.niiall/ph3.nii、 和all/ph4.nii

[在 shell 模式中, char1 -char2形式的构造]匹配在 char1 和 char2 之间排序的字符;所以[1-34]匹配1234

您可能想将for循环更改为

for i in $(seq 1 $coil)
do
    ph=all/ph${i}.nii
    ...
done

相关内容