最后

最后

考虑以下 bash 代码:

i=1
while [ $i -le 50 ]
do
    echo $i
    i=$(($i+1))     #  <-------
done

在尖线中,为什么使用多少个括号很重要?如果我这样写,代码就不起作用

i=$($i+1)

为什么会这样呢?

答案1

当然,这是完全不同的。我们专注于仅内置:

$((...))是算术替换。完成算术运算后,整个内容将被表达式的值替换。看http://mywiki.wooledge.org/ArithmeticExpression


((...))是一个算术命令,如果表达式非零,则返回退出状态 0;如果表达式为零,则返回 1。如果需要副作用(分配),也用作“let”的同义词。看http://mywiki.wooledge.org/ArithmeticExpression


命令替换:"$(cmd "foo bar")"导致命令“cmd”使用参数“foo bar”执行,并将"$(..)"被输出替换。看http://mywiki.wooledge.org/BashFAQ/002http://mywiki.wooledge.org/CommandSubstitution


最后

您可以编写比以下更好/更简单的行i=$(($i+1))

((i++))

对于loop

for i in {1..50}; do ...

或者

for ((i=1; i<50; i++)); do ...

相关内容