Неожиданное поведение expr

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


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

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

Спасибо,

5
задан sud03r 31 January 2010 в 10:14
поделиться

4 ответа

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

$ expr 3 '*' 2
6
9
ответ дан 18 December 2019 в 08:27
поделиться

Да, это не очень красиво, вам придется сделать свою обертку. Посмотрите на приложение builtin database rowse , которое обладает всеми необходимыми функциональными возможностями.

-121--647444-

Необходимо процитировать * , поскольку в противном случае оболочка попытается расширить имя файла.

$ expr 3 '*' 2
6
-121--4594627-

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

2
ответ дан 18 December 2019 в 08:27
поделиться

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

$ echo $(( 3*2 ))
6

, если вам требуется более продвижение математических операций, используйте BC (DC) или awk.

3
ответ дан 18 December 2019 в 08:27
поделиться

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

expr 3 \ * 2

5
ответ дан 18 December 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: