【发布时间】:2021-11-09 14:38:55
【问题描述】:
我在 bash 中有以下 while 循环:
set -euo pipefail
x=0
rounds=10
while [ $x -le $rounds ]
do
y=$(($x+1))
echo $x
echo $y
((x++))
done
但它在一次迭代后停止:
$ bash test.sh
0
1
只有当我删除 set -euo pipefail 时,我的循环才会完全运行。这是为什么呢?
【问题讨论】:
-
((x++))失败(返回非零)。set -e告诉 bash 在任何命令失败时退出。不要使用set -e -
有没有更好的运行
((x++))的方法? -
你可以使用
((++x))。 -
@Saraha :当您的某些命令进行整数运算时,使用
set -e有什么意义?我看不出你的程序-e的哪个位置有意义。 pipefail 也一样。在你的情况下,只有set -u对我有意义。
标签: bash while-loop