Expr não está analisando a expressão matemática no Bash

0

Eu tenho meu código bash como este, por exemplo:

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

ou

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

quando eu executo meu código assim ./script01.sh 3 4 eu recebo:

3+4

Estranhamente, o meu código é exatamente o mesmo que muitos outros tutoriais, ou há algo errado com o meu computador ou o problema está se originando de alguma outra coisa.

    
por Abdessalem Boukil 24.12.2017 / 12:15

3 respostas

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

Da página do manual:

ARG1 + ARG2
              arithmetic sum of ARG1 and ARG2

Como podemos ver, você precisa de um espaço entre argumentos e operador. Além disso, você tem que escapar de operadores que podem ser interpretados como globs no bash:

Beware that many operators need to be escaped  or  quoted  for  shells.
    
por vidarlo 24.12.2017 / 12:24
2

bash tem operadores aritméticos integrados, para que você não o faça precisa chamar para expr:

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

link
link

    
por glenn jackman 24.12.2017 / 13:09
1

Sua segunda versão deve ser assim:

#!/usr/bin/env bash

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

echo "$res"

E sua primeira versão deve ser:

#!/usr/bin/env bash

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

echo "$res"

Observe os espaços entre o operador + . E finalmente usando uma sintaxe mais moderna:

#!/usr/bin/env bash

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

echo "$res"

Observe que a última versão é a maneira preferida.

    
por George Udosen 24.12.2017 / 12:24