У меня есть мой bash-код, например, такой:
res=`expr $1+$2`
echo $res
или
res=$(expr $1+$2)
echo $res
, затем, когда я выполняю свой код следующим образом ./script01.sh 3 4
, я получаю:
3+4
Достаточно странно, что мой код такой же, как и во многих других руководствах, либо что-то не так с моим компьютером, либо проблема проистекает из чего-то другого.
[~]$ 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.
bash имеет встроенные арифметические операторы, поэтому вам не нужно вызывать 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
Ваша вторая версия должна быть такой:
#!/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"
Обратите внимание, что последняя версия является предпочтительным способом.