bash的赋值操作是不允许操作符前后有空格的,因为空格在bash编程中是一个关键字符。
创新互联建站是一家专业提供周至企业网站建设,专注与成都做网站、成都网站制作、成都h5网站建设、小程序制作等业务。10年已为周至众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
你说的有时一定要空格这个我不大清楚,但是有一个表达式运算印象比较深刻:
a=1
b=2
c=`expr $a + $b`
c的赋值表达式expr后的加号必须要有空格,不然会被解释为字符操作,所以这时:
echo $c
会打出3
但是c=`expr $a+$b`
echo $c
会打出1+2
expr运算中,运算符两侧都要有空格的,除此格式错误外其他没有错误!
另外,` `内的命令及shell外部命令(如expr)都会新建子shell去执行,开销大。强烈建议用shell内建命令let做基本运算。
number=`expr $number + 1`
sum=`expr $sum + $number`
可以改为:
let number+=1
let sum+=number
let支持C语法运算,变量前可以不加$取值符号;支持使用+=运算符,a+=b等同于a=a+b,可以让代码更简洁高效。
用let时运算表达式如果有空格,要放入双引号中,如:
let sum="sum + number"
从效率来说let==$(()) expr bc,这个是绝对的。
let和$(())运行是内建命令,使用相同的算法。
expr和bc是外部程序,expr的体积几乎等于bc的1/3,执行一次装入内存所消耗的时间就不一样。
从运算能力来说,自然bc排第一位。
其实还有awk,能更好的执行基本运算、汇总、求平均等更复杂的。而且还可以使用数组、哈希表。
可以考虑使用$(())进行数学运算
例如:
[WtbmWdgz@localhost 桌面]$ a=5;b=3
[WtbmWdgz@localhost 桌面]$ echo $((a*7-b))
32
这个可以执行加减乘除和取模(就是取余数)的数学计算还有逻辑运算的与、或、非、还有异或运算
与运算是两个条件同时成立结果才成立。或运算是两个条件有一个成立结果就成立。非运算只需要一个条件。条件成立,结果就是否定。条件不成立 ,结果就肯定。比如:下雨就不出门,不下雨就出门。异或也叫半加。它是 两个条件相同,结果是0,就是否定,两条件不同,结果才是肯定或者是1