我想请教一下大家$(( ))和$[ ]这两个的区别!这两个都可以用来运算整数,但下面有个脚本用$[ ]来运算的话,调试中途会报错!运行结果反而没报错!
#!/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
固定用法,看看元字符,做几个试验就明白了。。。我觉得错得挺明显的。。第二个不能只用一个括号我在运行这两个脚本我也都是可以得到正确的结果,也没报错。只是在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脚本中表达数学运算的方法:版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。