递增变量会触发bash 4中的EXIT,但不会触发bash 3中的EXIT
发布时间:2020-12-16 01:33:10 所属栏目:安全 来源:网络整理
导读:考虑这个(示例性)bash脚本: #!/bin/bash -eerrorExit() { echo "" 2 echo "ERROR (${var_scriptfilename}):" 2 echo "An unhandled error occurred." 2 intentionalExit 1}intentionalExit () { trap - EXIT # Unregister the EXIT trap exit $1}trap error
考虑这个(示例性)bash脚本:
#!/bin/bash -e errorExit() { echo "" >&2 echo "ERROR (${var_scriptfilename}):" >&2 echo "An unhandled error occurred." >&2 intentionalExit 1 } intentionalExit () { trap - EXIT # Unregister the EXIT trap exit $1 } trap errorExit EXIT # Trap script errors var_scriptfilename="$(basename "$0")" # ==== START OF TEST ==== var_counter=0 ((var_counter++)) echo "var_counter is $var_counter" >&2 # ===== END OF TEST ===== intentionalExit 0 如果我在Cygwin的bash中运行它会产生预期的输出: var_counter is 1 但是,如果我在我的Debian Squeeze盒子上运行它,这是它的预定目的地,我最终进入了EXIT陷阱: ERROR (test.increment.sh): An unhandled error occurred. …这是为什么? 如果我删除了-e选项,它在两个系统上都按预期工作,但显然我想保持-e使用. 更加繁琐的“通用”变体var_counter = $(($var_counter 1)),在两个shell上设置了-e,但是我更喜欢使用第一个符号(或类似的东西),因为它明显地粘住了在读取代码时作为增量操作. bash – 在Cygwin bash上的版本说: GNU bash,version 3.2.51(24)-release (i686-pc-cygwin) Copyright (C) 2007 Free Software Foundation,Inc. 在Debian上,它是: GNU bash,Version 4.1.5(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2009 Free Software Foundation,Inc. 我很感兴趣为什么会这样.有人知道这种行为的原因吗? 另外,是否有人知道在bash中增加变量的类似方法我可以使用?
来自Debian的bash4手册页:
((expression)) The expression is evaluated according to the rules described below under ARITHMETIC EVALUATION. If the value of the expres |