0

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

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

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

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

我该如何运行?提前致谢。

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

4

4 回答 4

1

Bash 不支持浮点数据类型。

$ man bash|grep -c -i float
0

python安装了吗?

ABC=$( python -c "print 10**$ABPOW" )
于 2013-08-15T18:53:13.983 回答
1

这是另一种方式:

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

于 2013-08-15T18:54:49.403 回答
1

一种替代方法是将 awk 用于完全支持浮点运算的完整脚本:

awk 'BEGIN{for(i=-11; i<=-9; i++) {ABC=10^i; print ABC}}'
1e-11
1e-10
1e-09
于 2013-08-15T19:19:22.297 回答
1

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

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

=此外, in 变量赋值前后不应有空格

于 2013-08-15T18:52:45.730 回答