为什么我需要bash脚本中的$((...))?

时间:2014-01-03 03:24:42

标签: linux bash shell

我正在关注一个bash脚本编写教程并遇到了这段代码 -

#!/bin/bash
x=1

while [$x -ne 5]
do
   echo $x
   x=$(($x+1))
done

$(())需要什么?为什么我不能只写x=$x+1而不是x=$(($x+1))? 或者为什么我不能像其他语言一样写x=x+1

2 个答案:

答案 0 :(得分:3)

来自http://ss64.com/bash/syntax-brackets.html

  

算术扩展

     

算术扩展允许评估算术表达式   并取代结果。算术格式   扩展是:

     

$((表达式))

     

表达式被视为在双引号内,但是a   括号内的双引号不予特别处理。所有   表达式中的标记经历参数扩展,命令   替换和引用删除。算术替换可以是   嵌套。

     

如果表达式无效,Bash将打印一条指示失败的消息   标准错误,没有替代发生。

编辑:我猜x = x + 1不起作用,因为它会将x设置为字符串“x + 1”,因此需要$(())。

答案 1 :(得分:2)

如果您更喜欢x=x+1的短片,您可能会发现使用let更好,如下所示 -

let x=x+1