Неожиданное поведение expr - PullRequest
5 голосов
/ 31 января 2010

Это может звучать немного тривиально, но на самом деле это довольно разочаровывает: может кто-нибудь объяснить мне:


[~:user$]expr 3 + 2
6
[~:user$]expr 3 / 2
1
[~:user$]expr 3 * 2
expr: syntax error

Когда страница man для expr точно указывает, что ARG1 * ARG2 является арифметическим произведением,

Спасибо,

Ответы [ 4 ]

9 голосов
/ 31 января 2010

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

$ expr 3 '*' 2
6
5 голосов
/ 02 марта 2010

Этого должно быть достаточно:

expr 3 \ * 2

3 голосов
/ 31 января 2010

@ OP, это полностью ваше дело, но я бы все же предложил использовать внутреннюю операцию добавления оболочки вместо вызова внешнего выражения

$ echo $(( 3*2 ))
6

Если вам требуются дополнительные математические операции, используйте bc (dc) или awk.

2 голосов
/ 31 января 2010

* расширяется вашей оболочкой до достижения expr, поэтому он содержит Documents, Videos, Work, nsfw и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...