bash set -e导致从for循环中随机退出

时间:2018-01-28 07:06:01

标签: bash random set echo let

当我使用set -e选项时,下面的简化循环随机退出。如果我删除set -e选项,它总是完成。我想尽可能使用set -e选项,但到目前为止,我不知道为什么它会退出以及为什么它会在每次运行时随机循环迭代中发生(试试吧!)。正如您所看到的,唯一的命令是let和echo。为什么let或echo命令会在随机时间返回非零代码,或者是其他什么东西在继续?

#!/bin/bash

#   Do Release configuration builds so we can set the build parameters

set -e
CFG=Release

for CASE in {0..511}
do

#   CASE [0...511] iterate
#   MMMM [2...255] random test cases
#   NNNN [1..MMMM) random test cases
#   RRRR [0...255] random test cases
#   XXXX [0...255] random test cases
#   DSXX [1...128] random test cases
#   OASM [1...255] random test cases
#   OLSM [1...255] random test cases

    let "MMMM = $RANDOM % 254 + 2"
    let "NNNN = $RANDOM % ($MMMM - 1) + 1"
    let "RRRR = $RANDOM % 256"
    let "XXXX = $RANDOM % 256"
    let "DSXX = $RANDOM % 128 + 1"
    let "OASM = $RANDOM % 255 + 1"
    let "OLSM = $RANDOM % 255 + 1"

    echo CFG = $CFG, CASE = $CASE, MMMM = $MMMM, NNNN = $NNNN, RRRR = $RRRR, XXXX = $XXXX, DSXX = $DSXX, OASM = $OASM, and OLSM = $OLSM

#   Some other stuff (build and test), that is not causing the problem, goes here

done

#   Some other stuff, that is not causing the problem, goes here

exit 0

1 个答案:

答案 0 :(得分:3)

|| true附加到let个命令或使用$((...))进行计算。

来自help let

  

退出状态:如果最后一个ARG评估为0,则返回1;让我们返回0。