我有以下名为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
有人可以解释为什么算术扩展的行为会有所不同吗?
答案 0 :(得分:0)
根据Bash手册:
((表达式))
根据ARITHMETIC EVALUATION下面描述的规则评估表达式。如果表达式的值不为零,则返回状态为0;否则返回状态为1.这与let"表达式#34;完全相同。
所以根据 post-operator 。 ((a++))
为a=0
时0
的值为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