如何在Bash中循环遍历一系列十进制数字?

10

我想生成一系列等间隔的十进制数。

例如,我想要在步长为0.1的情况下输出介于3.0和4.5之间的所有数字,可以使用echo命令。我尝试了$ for i {3.0..4.5..0.1}; do echo $i; done,但是会出现错误。

我还尝试了$ for i in $(seq 3.0 0.1 4.5); do echo $i; done,但是没有任何输出。


1
Bash不支持浮点数,最好切换到其他脚本语言。 - John Kugelman
有没有一个命令可以替代seq来生成这个列表,以便我可以使用它? - izxle
3个回答

24

我也尝试过 $ for i in $(seq 3.0 4.5 0.1); do echo $i; done,但什么都没发生。

顺序错了:

$ for i in $(seq 3.0 0.1 4.5); do echo $i; done

哇,谢谢,这个方法非常有效。比其他方法容易理解多了。 - izxle

5
如果你想要一个从3.5到4.5,步长为0.1的循环,可以使用以下代码。
for x in {35..45}; do
     y=`bc <<< "scale=1; $x/10"`
     echo $y
done

相同的步骤为0.01。
for x in {350..450}; do
         y=`bc <<< "scale=2; $x/100"`
         echo $y
done

谢谢,这个可行。除法需要使用 bc 吗? - izxle
刚才谷歌了一下,现在我正在使用 for x in {30..45}; do y=$(dc <<< "1k $x 10/p"); echo $y; done - izxle
没错,两种方法都可以。Bash仅支持整数算术运算。因此,总是需要使用另一个程序... - drpetermolnar

-2
 for i in {3.0,4.5,0.1}; do echo $i; done

不,那只会打印三行3.0、4.5和0.1。 - izxle
你想要打印什么? - bmscomp
一系列的十进制数,例如 3.0 3.1 3.2 3.3 ... 4.5 - izxle
1
@izxle - 原始问题容易引起误解。这里展示的语法对于它的预期非常有用。 - sancho.s ReinstateMonicaCellio
1
然而,这个语法“意图做什么”,与“循环遍历一系列十进制数”没有合理的关系。 - Charles Duffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接