带有算术表达式的 for 循环只能执行整数运算。如果是浮点值,该怎么办呢?
解决方案
如果系统提供了 seq 命令,则可以用它来生成浮点值。
for fp in $(seq 1.0 .01 1.1)
do
echo $fp; other stuff too
done
或者:
seq 1.0 .01 1.1 |
while read fp
do
echo $fp; other stuff too
done
讨论
seq 命令会生成一系列浮点值,每行一个。该命令的参数依次是起始值、增量、结束值。如果习惯了 C 语言中的 for 循环或学过 BASIC 中的循环(如 FOR I=4 TO 10 STEP 2
),你可能会觉得这种次序不符合直觉。seq 使用中间那个参数作为增量。
在第一个例子中,$()
在子 shell 中执行命令,返回结果中的换行符会被空白字符替换,因此,就 for 循环而言,每个值都是字符串。
在第二个例子中,seq 作为单独的命令运行,通过管道将其输出传入 while 循环,后者读取其中的每一行并做相应处理。如果数值序列特别长,这种方法更可取,因为 seq 命令是与 while 并行运行的。在第一个例子的 for 循环中,seq 必须先运行完毕,然后用全部的输出结果替换掉 $()
。对于冗长的数值序列来说,这种方法的时间开销和内存开销都不小。
酷客网相关文章:
评论前必须登录!
注册