将 bash 循环索引转换为浮点数

Fri*_*sco 0 shell-script floating-point

我需要i在循环中使用索引,例如for i in {0..10..5}在浮点计算中。将 i 转换为浮点数的最简单方法是什么?
变体

i=$(bc -l <<< "scale=7;$i")
Run Code Online (Sandbox Code Playgroud)

不工作。

Sté*_*las 5

使用bcorawk或具有浮点支持的外壳,例如ksh93, zshoryash代替bash

公元前

$ bc -l << \EOF
heredoc> for (i = 0; i <=  10; i += 2.5) i / 2
heredoc> EOF
0
1.25000000000000000000
2.50000000000000000000
3.75000000000000000000
5.00000000000000000000
Run Code Online (Sandbox Code Playgroud)

awk

$ awk 'BEGIN {for (i = 0; i <= 10; i += 2.5) print i / 2}'
0
1.25
2.5
3.75
5
Run Code Online (Sandbox Code Playgroud)

zsh

$ float i; for ((i = 0; i <= 10; i += 2.5)) print $((i/2))
0.
1.25
2.5
3.75
5.
Run Code Online (Sandbox Code Playgroud)

ksh93

$ for ((i = 0; i <= 10; i += 2.5)); do print "$((i/2))"; done
0
1.25
2
3.75
5
Run Code Online (Sandbox Code Playgroud)

(请注意小数点分隔符取决于语言环境(.,)。

亚什

i=0; while [ "$((i <= 10))" -ne 0 ]; do
  echo "$((i / 2))"
  i=$((i + 2.5))
done
Run Code Online (Sandbox Code Playgroud)

(内部$((...))使用.作为小数点分隔符,但I / O,语言环境的一个(.,)代替)。


编辑

现在,如果您只想遍历一些整数并且这些整数在其中用小数点表示,只需附加 a .0

 for i in {0..10..5}.0
Run Code Online (Sandbox Code Playgroud)

或者对于上述解决方案,使用printf "%.7f\n"代替print/echo来输出小数点分隔符后的 7 位数字。