开发者社区> 问答> 正文

$(( ))和$[ ]的区别?报错

我想请教一下大家$(( ))和$[ ]这两个的区别!这两个都可以用来运算整数,但下面有个脚本用$[ ]来运算的话,调试中途会报错!运行结果反而没报错!
#!/bin/bash
var1=100
var2=50
var3=45
var4=$(( $var1 * $(($var2 - $var3))  ))
echo "The result is $var4"
调试结果:
+ var1=100
+ var2=50
+ var3=45
+ var4=500
+ echo The result is 500
The result is 500

#!/bin/bash
var1=100
var2=50
var3=45
var4=$[ $var1 * ( $var2-$var3 ) ]
echo "The result is $var4"
调试结果:
+ var1=100
+ var2=50
+ var3=45
test6.sh: 6: test6.sh: Syntax error: "(" unexpected

展开
收起
爱吃鱼的程序员 2020-06-22 15:20:46 626 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    固定用法,看看元字符,做几个试验就明白了。。。我觉得错得挺明显的。。第二个不能只用一个括号我在运行这两个脚本我也都是可以得到正确的结果,也没报错。只是在debug的时候,就有一个出错了。var4=$[$var1*$[$var2-$var3]]?一样的呵我想额外我想问楼主是不是正在看《linux命令行和shell高级编程》这本书!我也是看到第十章了,有这个疑问呢!现在是/bin/sh->/bin/dash以前都是/bin/sh->/bin/bash是的,现在答案了,你翻到第22章就知道答案了!原来Ubuntu的发行版是将bashshell作为默认的交互shell,而把dash用来作为默认的/bin/sh的shell。所以我在命令行模式直接运行脚本没报错,一旦运行sh-x./aaa.sh的话就报错了!

    abs6.6.15第49页最下面:

    Notethatthisusageisdeprecated,andhasbeenreplacedbythe((...))construct.

    所以,$[]过时了,用$(())吧骚年

    确实,现在用$[]不适合移植了<tablecellspacing="0"cellpadding="0">查了一下,在bashshell脚本中表达数学运算的方法:
    1.使用expr命令:exproperation
    2.使用方括号:$[operation]
    3.使用双圆括号:$((operation))
    但dashshell只支持expr命令和双圆括号的方法,但不支持方括号方法。我一看到ubuntu就把sh改成bash,这已经是老习惯了。

    2020-06-22 15:21:02
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
JS 语言在引擎级别的执行过程 立即下载
低代码开发师(初级)实战教程 立即下载