-le bash 脚本中的比较问题

use*_*157 1 bash scripts

我在 Ubuntu 11.10 下,当我在 bash 中执行这个程序时,出现以下错误:

exec.bash: line 25: [: 0.1: integer expected as an expression
Run Code Online (Sandbox Code Playgroud)

第 25 行是:

while [ $p -le 1.0 ]
Run Code Online (Sandbox Code Playgroud)

在以下上下文中

p=0.1

while [ $p -le 1.0 ]
do
    echo ----probability---- $p
    java $jvmargs -classpath $CP jbenchmarker.MainSimulation $p
    (( p= $p + 0.1 ))
done
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿?

Lek*_*eyn 6

您的while循环可以用 for 循环代替。由于 Bash 无法处理浮点运算,您应该使用普通整数,并使用类似bc创建浮点数的程序。scale=1;之前的命令$i/10确保始终只有一个小数(例如 0.1)。

for ((i=1; i<=10; i++))
do
    p=$(bc <<<"scale=1;$i/10")
    echo ----probability---- $p
    java $jvmargs -classpath $CP jbenchmarker.MainSimulation $p
done
Run Code Online (Sandbox Code Playgroud)

这相当于:

i=1
while ((i<=10))
do
    p=$(bc <<<"scale=1;$i/10")
    echo ----probability---- $p
    java $jvmargs -classpath $CP jbenchmarker.MainSimulation $p
    ((i++))
done
Run Code Online (Sandbox Code Playgroud)

command <<<...是一个巧妙的技巧,将 ... 写入 的标准输入command并且等效于echo ... | command