我怎样才能在Linux shell中进行variables分工?
当我在我的shell中运行命令如下,它返回一个expr: non-integer argument
错误。 有人可以向我解释这个吗?
$ x=20 $ y=5 $ expr x / y expr: non-integer argument
这些variables是shellvariables。 要将它们作为参数展开到另一个程序( 即 expr
),您需要使用$
prefix:
expr $x / $y
它抱怨的原因是因为它认为你试图操作字母字符( 即非整数)
如果使用Bash shell,则可以使用expression式语法获得相同的结果:
echo $((x / y))
要么:
z=$((x / y)) echo $z
引用Bashvariables需要参数扩展
大多数Linux发行版的默认shell是Bash。 在Bash中,variables必须使用美元符号前缀参数扩展 。 例如:
x=20 y=5 expr $x / $y
当然,Bash也有算术运算符和一个特殊的算术扩展语法 ,所以不需要调用expr二进制文件作为一个单独的进程。 你可以让shell做所有这些工作:
x=20; y=5 echo $((x / y))
为什么不使用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
我相信它已经在其他线程中提到:
calc(){ awk "BEGIN { print "$*" }"; }
那么你可以简单地input:
calc 7.5/3.2 2.34375
在你的情况下,将是:
x=20; y=3; calc $x/$y
或者如果你愿意的话,把它作为一个单独的脚本添加到$ PATH中,这样你就可以在你的本地shell中使用它:
#!/bin/bash calc(){ awk "BEGIN { print $* }"; }
您可以使用命令replace如下:
z="$(expr $x / $y)" echo "$z"
确保空间如上所述