我正在关注一个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
?
答案 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