【发布时间】:2015-05-22 13:29:35
【问题描述】:
我试图在 bash 中划分两个 var,这就是我得到的:
var1=3;
var2=4;
echo ($var1/$var2)
我总是遇到语法错误。 有谁知道怎么回事?
【问题讨论】:
-
这里的实际问题是错误(子shell/算术语法)。修复后,出现整数除法问题:Bash Division Keeps giving 0 - Stack Overflow
我试图在 bash 中划分两个 var,这就是我得到的:
var1=3;
var2=4;
echo ($var1/$var2)
我总是遇到语法错误。 有谁知道怎么回事?
【问题讨论】:
shell 解析只对整数除法有用:
var1=8
var2=4
echo $((var1 / var2))
输出: 2
而不是你的例子:
var1=3
var2=4
echo $((var1 / var2))
输出: 0
最好使用 bc:
echo "scale=2 ; $var1 / $var2" | bc
输出: .75
scale 是所需的精度
【讨论】:
bc的输出应该是字符串还是浮点数?
如果你想不使用 bc,你可以使用 awk:
$ awk -v var1=3 -v var2=4 'BEGIN { print ( var1 / var2 ) }'
0.75
【讨论】:
这里有两个可能的答案。
要进行整数除法,可以使用shell:
$ echo $(( var1 / var2 ))
0
$(( ... )) 语法被称为算术扩展。
浮点除法需要使用其他工具,如bc:
$ bc <<<"scale=2; $var1 / $var2"
.75
scale=2 语句将输出的精度设置为 2 位小数。
【讨论】:
calc () { echo "scale=2;$*" | bc | sed 's/\.0*$//'} 进行计算。后者sed 是删除尾随零,例如100/10 我们得到 10 而不是 10.00...
#!/bin/bash
var1=10
var2=5
echo $((var1/var2))
【讨论】:
您也可以使用 Python 来完成此任务。
输入python -c "print( $var1 / float($var2) )"
【讨论】: