例如,我有如下的 bash 代码:
res=`expr $1+$2`
echo $res
或者
res=$(expr $1+$2)
echo $res
然后当我像这样执行我的代码时./script01.sh 3 4
我得到:
3+4
奇怪的是,我的代码与许多其他教程完全相同,要么是我的电脑有问题,要么问题源于其他原因。
答案1
[~]$ 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 中可能被解释为 glob 的运算符:
Beware that many operators need to be escaped or quoted for shells.
答案2
狂欢具有内置算术运算符,因此您不需要调用 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
答案3
你的第二个版本应该是这样的:
#!/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"
请注意,最后一个版本是首选方式。