我怎样才能在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" 

确保空间如上所述