我正在尝试运行一个包含嵌套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
前面加上一个负号,但指数仍然记录为正数。
答案 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