shell中$[],$(())

今天有个困惑,在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]会被解释为一个算术表达式,其中变量ab的值会被替换进去,然后进行求和计算。因此,在控制台中输入a=1;b=2;echo $[$a+$b]会得到计算结果3。

而在使用bash编写的shell脚本中,语法稍有不同。当在脚本中使用a=1;b=2;echo $[$a+$b]时,变量ab的值同样会被替换进算术表达式中,但是这里的$[$a+$b]并不会被解释为算术表达式,而是被当作字符串输出。因此,输出的结果为$[1+2],即原封不动地输出了这个字符串。

这里的区别主要是由于解释器的不同,Linux控制台中的解释器会自动解释算术表达式,而在shell脚本中需要使用特定的语法才能进行算术运算。如果要在shell脚本中实现相同的计算功能,可以使用$((...))语法,例如a=1; b=2; echo $((a+b)),这样就可以得到正确的计算结果3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值