Bash Shell循环中使用浮点值

带有算术表达式的 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 必须先运行完毕,然后用全部的输出结果替换掉 $()。对于冗长的数值序列来说,这种方法的时间开销和内存开销都不小。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!