为什么带有嵌套反勾号的shell命令失败?

为什么带有嵌套反勾号的shell命令失败?,shell,unix,backticks,Shell,Unix,Backticks,我有一个shell脚本,其中包含以下内容: var1=`expr $RANDOM % 100` var2=`expr $RANDOM % 1000 \* 60` ... ... sleep `expr $var2- `date -t` + $var1` 它给了我这个错误: sleep:invalid number of operands expr error: invalid syntax + cannot execute no such file or directory 为什么??错误

我有一个shell脚本,其中包含以下内容:

var1=`expr $RANDOM % 100`
var2=`expr $RANDOM % 1000 \* 60`
...
...
sleep `expr $var2- `date -t` + $var1`
它给了我这个错误:

sleep:invalid number of operands 
expr error: invalid syntax
+ cannot execute no such file or directory

为什么??错误是什么意思?

因为反勾号不会嵌套

如果您的shell支持更现代的
$(…)
语法,请尝试以下方法:

var1=$(expr $RANDOM % 100)
var2=$(expr $RANDOM % 1000 \* 60)
...
...
sleep $(expr $var2 - $(date -t) + $var1)
如果没有,可以将中间值存储在另一个变量中:

var1=`expr $RANDOM % 100`
var2=`expr $RANDOM % 1000 \* 60`
...
...
date=`date -t`
sleep `expr $var2 - $date + $var1`
(我还添加了一个空格,将
$var2-
更改为
$var2-

顺便说一句,我无法尝试此操作,因为在我的系统上,
date
命令没有
-t
选项