今天有个困惑,在linux控制台输入a=1;b=2;echo $[$a+$b]可以得到计算结果3,但是相同的命令放入到bash脚本中,却不行
#!/bin/bash
a=1;b=2;echo $[$a+$b]
##执行脚本后输出结果 $[1+2]
查了下看到说是在旧版本的Bash中,可以使用$[...]
语法进行算术运算。这种语法可以在脚本中直接计算表达式并输出结果。然而,从Bash 4.0版本开始,$[...]
语法已被弃用。官方推荐使用$((...))
语法来进行算术运算。所以,如果你的Bash版本较新(4.0及以上),执行echo $[1+2]
将不会得到计算结果。我们可以使用$((...))
语法
难道我的命令行和bash脚本中用的是不同的解释器???
问了下chatGPT
在Linux控制台中,当输入命令时,命令会被bash(或其他命令行解释器)解释和执行。在这种情况下,$[$a+$b]
会被解释为一个算术表达式,其中变量a
和b
的值会被替换进去,然后进行求和计算。因此,在控制台中输入a=1;b=2;echo $[$a+$b]
会得到计算结果3。
而在使用bash编写的shell脚本中,语法稍有不同。当在脚本中使用a=1;b=2;echo $[$a+$b]
时,变量a
和b
的值同样会被替换进算术表达式中,但是这里的$[$a+$b]
并不会被解释为算术表达式,而是被当作字符串输出。因此,输出的结果为$[1+2]
,即原封不动地输出了这个字符串。
这里的区别主要是由于解释器的不同,Linux控制台中的解释器会自动解释算术表达式,而在shell脚本中需要使用特定的语法才能进行算术运算。如果要在shell脚本中实现相同的计算功能,可以使用$((...))
语法,例如a=1; b=2; echo $((a+b))
,这样就可以得到正确的计算结果3