【问题标题】:Why does my shell command with nested backticks fail?为什么我的带有嵌套反引号的 shell 命令会失败?
【发布时间】:2013-10-15 20:50:56
【问题描述】:

我有一个包含以下内容的 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 unix backticks


    【解决方案1】:

    因为反引号不会嵌套。

    如果你的 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 选项。

    【讨论】:

      猜你喜欢
      • 2022-10-24
      • 1970-01-01
      • 2015-07-25
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      相关资源
      最近更新 更多