Bash增量破坏脚本

时间:2013-11-20 18:53:43

标签: bash increment

我有一个奇怪的问题,即增加一个bash变量 在我第一次尝试增加后我不能破坏 pin down,这是我正在做的和调试输出的示例, 任何人都认为这不应该有用吗?

我目前正在GNU bash, version 4.2.45(1)-release (i686-pc-linux-gnu)

#!/bin/bash
set -ex 
declare -i elem=0
echo $elem # 0
    (( elem++ )) # breaks
echo $elem # 1 but never encountered
while IFS=$'\n' read -r line || [[ -n "$line" ]]; do
    (( elem++ ))
    echo $elem
done <"${1}" # foo\nbar\nbaz

输出

./incr.sh test
+ declare -i elem=0
+ echo 0
0
+ ((  elem++  ))

最奇怪的部分是将初始递增器更改为(( elem+=1 )) 整个程序正确递增,这看起来非常麻烦......

#!/bin/bash
set -ex 
declare -i elem=0
echo $elem
    (( elem+=1 ))
echo $elem
while IFS=$'\n' read -r line || [[ -n "$line" ]]; do
    (( elem++ ))
    echo $elem
done <"${1}" # foo\nbar\nbaz

输出

+ declare -i elem=0
+ echo 0
0
+ ((  elem+=1  ))
+ echo 1
1
+ IFS='
'
+ read -r line
+ ((  elem++  ))
+ echo 2
2
+ IFS='
'
+ read -r line
+ ((  elem++  ))
+ echo 3
3
+ IFS='
'
+ read -r line
+ ((  elem++  ))
+ echo 4
4
+ IFS='
'
+ read -r line
+ [[ -n '' ]]

1 个答案:

答案 0 :(得分:3)

当任何命令返回失败时,

set -e会使您的脚本退出。

(( 0 )),等效elem=0; (( elem++ ))返回失败。

因此,脚本退出。

如果您set -e想要运行您不关心的状态的命令,可以使用

(( elem++ )) || true