虽然 bash 不处理浮点数,但该seq
实用程序可以。[注1]
基本语法是seq FIRST INCREMENT LAST
,所以在你的情况下你可以使用
for count in "$(seq 10.0 0.1 20.0)"; do
# something with $count
done
如果您提供两个参数,则假定它们是 FIRST 和 LAST,其中 INCREMENT 为 1。如果您仅提供一个参数,则假定为 LAST,FIRST 和 INCREMENT 均为 1。如您的示例所示,序列为包含所以 FIRST 和 LAST 都将产生,前提是 INCREMENT 均分 FIRST-LAST。
您还可以包含显式格式:
$ seq -f "%06.3f" 1 .5 2
01.000
01.500
02.000
这种技术的一个缺点是它预先计算了整个值集合。如果循环将执行数十万次,则可能会占用大量内存,在这种情况下,您可以使用管道或进程替换:
while read count; do
# something with count
done < <(seq 10.0 0.000001 20.0)
笔记
seq
不是 Posix,但它几乎总是存在;它是 GNU coreutils 和类似实用程序的一部分,在 Mac OS X 中可用)自 3.0 以来已在 NetBSD 中,自 9.0 以来已在 FreeBSD 中。