Почему моя команда оболочки с вложенными обратными кавычками не работает?

У меня есть сценарий оболочки, содержащий это:

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

Почему? Что означает ошибка?


person nya    schedule 15.10.2013    source источник


Ответы (1)


Потому что обратные кавычки не гнездятся.

Если ваша оболочка поддерживает более современный синтаксис $(...), попробуйте следующее:

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.

person Keith Thompson    schedule 15.10.2013