当我在我的 shell 中运行如下命令时,它会返回一个expr: non-integer argument
错误。有人可以向我解释一下吗?
$ x=20
$ y=5
$ expr x / y
expr: non-integer argument
这些变量是shell变量。要将它们作为参数扩展到另一个程序(ie expr
),您需要使用$
前缀:
expr $x / $y
它抱怨的原因是因为它认为您正在尝试对字母字符(即非整数)进行操作
如果您使用的是 Bash shell,则可以使用表达式语法获得相同的结果:
echo $((x / y))
或者:
z=$((x / y))
echo $z
我相信它已经在其他线程中提到过:
calc(){ awk "BEGIN { print "$*" }"; }
然后你可以简单地输入:
calc 7.5/3.2
2.34375
在您的情况下,它将是:
x=20; y=3;
calc $x/$y
或者,如果您愿意,可以将其添加为单独的脚本并使其在 $PATH 中可用,这样您就可以始终在本地 shell 中使用它:
#!/bin/bash
calc(){ awk "BEGIN { print $* }"; }
为什么不使用 let;我觉得容易多了。这是一个您可能会发现有用的示例:
start=`date +%s`
# ... do something that takes a while ...
sleep 71
end=`date +%s`
let deltatime=end-start
let hours=deltatime/3600
let minutes=(deltatime/60)%60
let seconds=deltatime%60
printf "Time spent: %d:%02d:%02d\n" $hours $minutes $seconds
另一个简单的例子 - 计算自 1970 年以来的天数:
let days=$(date +%s)/86400
要获取小数点后的数字,您可以这样做:-
read num1 num2
div=`echo $num1 / $num2 | bc -l`
echo $div