我在 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)
问题出在哪儿?
您的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