gpt4 book ai didi

Bash 增量破坏脚本

转载 作者:行者123 更新时间:2023-12-04 04:33:43 25 4
gpt4 key购买 nike

我在增加一个 bash 变量时遇到了一个奇怪的问题
在我第一次尝试增量后崩溃,我不能
确定,这是我正在做的事情和调试输出的示例,
有没有人看到这不应该工作的任何原因?

我目前在 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 '' ]]

最佳答案

set -e当任何命令返回失败时,使您的脚本退出。
(( 0 )) ,相当于 elem=0; (( elem++ ))返回失败。

因此,脚本退出。

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

(( elem++ )) || true

关于Bash 增量破坏脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20104493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com