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

Вы можете установить «уродливый» плагин GStreamer из Software Center или выполнить следующую команду:

sudo apt-get install gstreamer0.10-plugins-ugly
0
задан 24 December 2017 в 15:27

9 ответов

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

На странице man:

ARG1 + ARG2
              arithmetic sum of ARG1 and ARG2

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

Beware that many operators need to be escaped  or  quoted  for  shells.
4
ответ дан 22 May 2018 в 15:56
[~]$ a=1;b=2 [~]$ expr $a+$b 1+2 [~]$ expr $a + $b 3 [~]$ expr $a * $b expr: syntax error [~]$ expr $a \* $b 2

На странице man:

ARG1 + ARG2 arithmetic sum of ARG1 and ARG2

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

Beware that many operators need to be escaped or quoted for shells.
4
ответ дан 18 July 2018 в 00:32
[~]$ a=1;b=2 [~]$ expr $a+$b 1+2 [~]$ expr $a + $b 3 [~]$ expr $a * $b expr: syntax error [~]$ expr $a \* $b 2

На странице man:

ARG1 + ARG2 arithmetic sum of ARG1 and ARG2

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

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

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

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

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

2
ответ дан 22 May 2018 в 15:56

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

#!/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
ответ дан 22 May 2018 в 15:56

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

#!/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
ответ дан 18 July 2018 в 00:32

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

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

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

2
ответ дан 18 July 2018 в 00:32

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

#!/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 July 2018 в 17:14

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

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

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

2
ответ дан 24 July 2018 в 17:14

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

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