我有一个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
Run Code Online (Sandbox Code Playgroud)
我是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
Run Code Online (Sandbox Code Playgroud)
还要注意,将浮点数用作循环计数是不明智的。您知道十乘0.1几乎不是一个吗?这可以解释为什么您会丢失或获得额外的迭代。相反,您应该使用整数N进行迭代,并将所需的浮点数计算为例如0.5 + N * 0.05。