2013-10-15 11 views
2

У меня есть скрипт, содержащий это:Почему моя команда оболочки с вложенными backticks терпит неудачу?

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 

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

ответ

3

Поскольку обратные выходы не гнездятся.

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

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 вариант.

Смежные вопросы