首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash Post Increment

Bash Post Increment
EN

Stack Overflow用户
提问于 2013-02-22 21:40:32
回答 4查看 4.6K关注 0票数 2

只是关于在bash中做后增量的正确方法的一个小问题。

代码语言:javascript
复制
while true; do
  VAR=$((CONT++))
  echo "CONT: $CONT"
  sleep 1
done

在本例中,VAR从1开始。

代码语言:javascript
复制
CONT: 1
CONT: 2
CONT: 3

但如果我这样做:

代码语言:javascript
复制
while true; do
  echo "CONT: $((CONT++))"
  sleep 1
done

它从0开始。

代码语言:javascript
复制
CONT: 0
CONT: 1
CONT: 2

似乎第一种情况表现良好,因为((CONT++))将计算CONT (未定义,?0?)然后加+1。

如何将echo语句中的行为赋值给变量?

编辑:在我的第一个示例中,我应该回显VAR,而不是回显CONT,这样它就可以正常工作,所以从一开始就是我的错误。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-22 21:51:09

两种情况下的都是正常和合理的。

foo++将首先返回foo的当前值(自动递增前),然后返回自动递增。

在第一种情况下,如果您更改为echo "CONT: $VAR",它将产生与第二种情况相同的结果。

如果你想使用自动递增的1,2,3...,你可以试试:

代码语言:javascript
复制
echo "CONT: $((++CONT))"
票数 8
EN

Stack Overflow用户

发布于 2013-02-22 21:56:50

让我们简化您的代码,使其更容易理解。

以下内容:

代码语言:javascript
复制
  VAR=$((CONT++))
  echo "CONT: $CONT"

可以分为以下几个步骤:

代码语言:javascript
复制
  VAR=$CONT            # assign CONT to VAR
  CONT=$((CONT+1))     # increment CONT
  echo "CONT: $CONT"   # print CONT

类似的,下面的语句:

代码语言:javascript
复制
echo "CONT: $((CONT++))"

等同于:

代码语言:javascript
复制
echo "CONT: $CONT"    # print CONT
CONT=$((CONT+1))      # then increment CONT

希望这有助于解释为什么你会看到这种行为。

票数 2
EN

Stack Overflow用户

发布于 2013-02-22 21:52:16

后递增意味着,返回前一个值,然后递增该值。

在您的第一个示例中,您将使用递增后的值。在您的第二个示例中,在递增它之前使用它。

如果希望得到与第一个示例相同的结果,则必须使用前缀增量

代码语言:javascript
复制
while true; do
    echo "CONT: $((++CONT))"
    sleep 1
done
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15025564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档