2011-01-20 2 views

ответ

22

Нет необходимости в expr, POSIX оболочка не позволяет $(()) для арифметической оценки:

echo $((x+1)) 

Смотреть §2.6.4

1

попробовать эхо $ (($ х + 1))

Я думаю, что работает только на некоторой версии Баш, что 3 или более ..

echo `expr $x + 1` 

будет другое решение

+0

Как уже упоминалось в моем ответе, '$ (())' на самом деле POSIX совместимые, не bash'ism. – SiegeX

0

Мы используем expr для этого:

echo `expr $x + 1` 
0

Попробуйте так:

echo $(($X + 1)) 
3

Try двойной круглые скобки:

$ x=7; echo $(($x + 1)) 
8 
0
$ echo $(($x+1)) 
8 

От man bash:

Арифметических расширения

Арифметического расширения позволяет оценить выражение арифметического и замену результата. Формат для расширения арифметика:

$((expression)) 

Выражение рассматривается как если бы оно было заключено в двойные кавычки , но двойные кавычки внутри скобок не обработаны специально. Все токены в выражении подвергаются расширению параметра, расширению строки, замене команд, и удалению цитат. Арифметические подстановки могут быть вложенными.

Оценка проводится согласно приведенным ниже правилам ниже под АРИМЕТИЧЕСКОЙ ОЦЕНКОЙ. Если выражение недействительно, bash печатает сообщение об ошибке и не имеет замены .

+2

Не нужно префикс vars с '$' inside '(())' – SiegeX

3

Вы также можете использовать утилиту bc:

$ x=3; 
$ echo "$x+5.5" | bc 
8.5 
+0

+1 для bc !!!!! –

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