Expr не разбирает математическое выражение в Bash

У меня есть мой bash-код, например, такой:

res=`expr $1+$2`
echo $res

или

res=$(expr $1+$2)
echo $res

, затем, когда я выполняю свой код следующим образом ./script01.sh 3 4, я получаю:

3+4

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

0
задан 24 December 2017 в 14:27

3 ответа

[~]$ a=1;b=2
[~]$ expr $a+$b
1+2
[~]$ expr $a + $b
3
[~]$ expr $a * $b
expr: syntax error
[~]$ expr $a \* $b
2

Со страницы руководства:

ARG1 + ARG2
              arithmetic sum of ARG1 and ARG2

Как мы видим, вам нужен пробел между аргументами и оператором. Кроме того, вы должны избегать операторов, которые можно интерпретировать как глобусы в bash:

Beware that many operators need to be escaped  or  quoted  for  shells.
4
ответ дан 24 December 2017 в 14:27

имеет встроенные арифметические операторы, поэтому вам не нужно вызывать expr:

res=$(( $1 + $2 ))

https://www.gnu.org /software/bash/manual/bashref.html#Arithmetic-Expansion
https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic

2
ответ дан 24 December 2017 в 14:27

Ваша вторая версия должна быть такой:

#!/usr/bin/env bash

res=$(expr "$1" + "$2")

echo "$res"

И ваша первая версия должна быть:

#!/usr/bin/env bash

res=`expr "$1" + "$2"`

echo "$res"

Обратите внимание на пробелы между оператором +. И наконец, используя более современный синтаксис:

#!/usr/bin/env bash

res=$(( $1 + $2 ))

echo "$res"

Обратите внимание, что последняя версия является предпочтительным способом.

1
ответ дан 24 December 2017 в 14:27
  • 1
    @GilbertoAlbino: Вы попробовали это? Это работало? – Beni Bogosel 13 June 2012 в 16:58
  • 2
    @GilbertoAlbino: Вы попробовали это? Это работало? – Beni Bogosel 13 June 2012 в 16:58
  • 3
    @GilbertoAlbino: Вы попробовали это? Это работало? – Beni Bogosel 13 June 2012 в 16:58
  • 4
    @GilbertoAlbino: Вы попробовали это? Это работало? – Beni Bogosel 13 June 2012 в 16:58
  • 5
    @GilbertoAlbino: Вы попробовали это? Это работало? – Beni Bogosel 13 June 2012 в 16:58
  • 6
    @GilbertoAlbino: Вы попробовали это? Это работало? – Beni Bogosel 13 June 2012 в 16:58

Другие вопросы по тегам:

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