Bash errexit与算术扩展

时间:2017-06-29 08:20:38

标签: bash

我有以下名为errexit的Bash脚本:

#! /bin/bash
set -ex
a=$1
((a++))
echo $a

当我使用参数“0”运行它时,它会触发错误退出:

$ ./errexit 0; echo $?
+ a=0
+ (( a++ ))
1

但是当我使用参数“1”运行它时,它不会触发错误退出:

$ ./errexit 1; echo $?
+ a=1
+ (( a++ ))
+ echo 2
2
0

我不明白,为什么2不被解释为假,尽管在if声明中就是这种情况:

$ if grep nix nix; then echo $?=t; else echo $?=f; fi
grep: nix: No such file or directory
2=f

有人可以解释为什么算术扩展的行为会有所不同吗?

1 个答案:

答案 0 :(得分:0)

根据Bash手册:

  

((表达式))
  根据ARITHMETIC EVALUATION下面描述的规则评估表达式。如果表达式的值不为零,则返回状态为0;否则返回状态为1.这与let"表达式#34;完全相同。

所以根据 post-operator ((a++))a=00的值为a=0 echo $((a++)) # 0 。因此返回状态为1.

<szItemID>3268750004533</szItemID> from the first set 
<lMerchandiseStructureID>40</lMerchandiseStructureID> from the second set 
 <szDesc>PHG VIANDE SECHEE DE</szDesc>  from the third set 
 <dPackingUnitPriceAmount>75</dPackingUnitPriceAmount> from the fourth tag