我有一个奇怪的问题,即增加一个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 '' ]]
答案 0 :(得分:3)
set -e
会使您的脚本退出。
(( 0 ))
,等效elem=0; (( elem++ ))
返回失败。
因此,脚本退出。
如果您set -e
想要运行您不关心的状态的命令,可以使用
(( elem++ )) || true