我有一个zsh脚本,该脚本应生成一堆Z矩阵文件,但在一次迭代后退出while循环。N和M从不增加
#!/bin/zsh
n=0.5 
m=0.5
a=60.0
i=1
while [[ $n -le 1.5 ]];do
    while [[ $m -le 1.5 ]];do
        while [[ $a -le 160 ]];do
            echo $i
            echo "o" > H2O.$i.Z
            eval echo "h  1" $n >> H2O.$i.Z
            eval echo "h  1" $m "2" $a >> H2O.$i.Z
            let i=$i+1
            let a=$a+5.0
        done
        let m=$m+0.05
    done
    let n=$n+0.05
done
我是zsh的新手。我的语法错误吗?
在-le操作上整数操作。对于浮点,请使用内置算法。我也相信您可能实际上想重新初始化m和a内循环中的值。然后的错误是,您仅在开始时对其进行了一次初始化,并且第二次迭代的内部循环条件为假。
您可以使用for((;;))循环将其编写得更紧凑:
#!/usr/local/bin/zsh
i=1
for ((n=0.5; n <= 1.5; n+=0.05)); do
  for ((m=0.5; m <= 1.5; m+=0.05)); do
    for ((a=60.0; a <= 160; a+=5.0)); do
      echo $i $a $m $n
      let i=$i+1
    done
  done
done
还要注意,将浮点数用作循环计数是不明智的。您知道十乘0.1几乎不是一个吗?这可以解释为什么您会丢失或获得额外的迭代。相反,您应该使用整数N进行迭代,并将所需的浮点数计算为例如0.5 + N * 0.05。