Why does my shell command with nested backticks fail?

19,660

Because backticks don't nest.

If your shell supports the more modern $(...) syntax, try this:

var1=$(expr $RANDOM % 100)
var2=$(expr $RANDOM % 1000 \* 60)
...
...
sleep $(expr $var2 - $(date -t) + $var1)

If not, you can store the intermediate value in another variable:

var1=`expr $RANDOM % 100`
var2=`expr $RANDOM % 1000 \* 60`
...
...
date=`date -t`
sleep `expr $var2 - $date + $var1`

(I've also added a space, changing $var2- to $var2 -.)

Incidentally, I was unable to try this, since on my system the date command has no -t option.

Share:
19,660
nya
Author by

nya

Updated on June 04, 2022

Comments

  • nya
    nya almost 2 years

    I have a shell script containing this:

    var1=`expr $RANDOM % 100`
    var2=`expr $RANDOM % 1000 \* 60`
    ...
    ...
    sleep `expr $var2- `date -t` + $var1`
    

    It gives me this error:

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

    Why? What does the error mean?