Bash脚本使用否定循环

时间:2013-08-15 18:47:02

标签: bash

我正在尝试运行一个包含嵌套for循环的bash脚本,其中变量应循环通过负指数,即:

for ABPOW in {-11..-9}
do
ABC = $((10**$ABPOW))
          for ABCOEFF in {1..9}
          do
              sed -e 's/ACOEFF/'$ABC'/'\

这只是代码循环的内部两个。当第一个括号(对于ABPOW)中的值为正时,代码运行正常。但是,当我像上面那样拥有它们时,这就是我需要的,传递给屏幕的错误是:

./scripting_test2.bash: line 30: 10**-11: exponent less than 0 (error token is "1")

如何进行此操作?提前谢谢。

PS:我尝试在$ABPOW前面加上一个负号,但指数仍然记录为正数。

4 个答案:

答案 0 :(得分:1)

Bash不支持浮点运算(这是将某些东西提升为负幂所必需的)。相反,您应该使用bc实用程序。

ABC=$(bc -l <<< "10 ^($ABPOW)")

此外,变量赋值中的=之前和之后应该没有空格

答案 1 :(得分:1)

Bash不支持浮点数据类型。

$ man bash|grep -c -i float
0

您是否安装了python

ABC=$( python -c "print 10**$ABPOW" )

答案 2 :(得分:1)

这是另一种方式:

perl -e 'for $abpow (-11..-9) { $abc=10**$abpow; for (1..9) { system("echo $abc"); } }'

答案 3 :(得分:1)

另一种方法是使用awk作为完全支持浮点运算的完整脚本:

awk 'BEGIN{for(i=-11; i<=-9; i++) {ABC=10^i; print ABC}}'
1e-11
1e-10
1e-09