bash运算符++行为带有常量

时间:2018-10-14 05:00:05

标签: bash pre-increment

有时,在计算带有常数的自我消隐运算++时遇到问题,这对我来说很奇怪。 (这不是原始代码,我只是复制了类似外观的行)

#!/bin/bash
echo "out1="$((++5))
echo "out2="$((5++))

代码段看起来像;当我执行它时,得到以下结果:

$ bash test.sh
out1=5
test.sh: line 3: 5++: syntax error: operand expected (error token is "+")

bash版本为: GNU bash,版本4.2.46(2)-发行版(x86_64-redhat-linux-gnu)

我想知道:

  1. 为什么预增量运算符没有语法错误?
  2. 为什么后递增操作返回的值不是5,而是6。

谢谢。

1 个答案:

答案 0 :(得分:1)

我不能肯定地说,我不想浏览源代码来了解算术表达式解析器。我的猜测是:

  • 预增量实际上不是预增量,但是您可以在常量之前放置任意数量的+-符号,以确定它是正数还是负数。我怀疑解析器看到$(( +(+5) ))
    • 摘要:您只是在指定数字的符号。
  • 由于常量后增加没有意义(您不能用值6 分配常量5),就好像您在键入“ 5 plus ... something”一样。而不是算术值,您给了另一个加号。因此,语法错误和“操作数错误”消息。就像解析器看到$(( (5) + (+) ))
    • 摘要:第一个加号可以,第二个是错误。