【发布时间】:2020-04-30 03:01:51
【问题描述】:
a.sh的内容是
echo start
let index=(RANDOM % 4)
echo $index
a.sh 有时无法生成数字
gqqnbig@instance-1:~/test/systemd$ vim a.sh
gqqnbig@instance-1:~/test/systemd$ bash -e a.sh
start
3
gqqnbig@instance-1:~/test/systemd$ bash -e a.sh
start
3
gqqnbig@instance-1:~/test/systemd$ bash -e a.sh
start
2
gqqnbig@instance-1:~/test/systemd$ bash -e a.sh
start
2
gqqnbig@instance-1:~/test/systemd$ bash -e a.sh
start
2
gqqnbig@instance-1:~/test/systemd$ bash -e a.sh
start
3
gqqnbig@instance-1:~/test/systemd$ bash -e a.sh
start
3
gqqnbig@instance-1:~/test/systemd$ bash -e a.sh
start
gqqnbig@instance-1:~/test/systemd$ echo $?
1
gqqnbig@instance-1:~/test/systemd$
看我上次运行a.sh,它只输出“start”,不输出index,说明let index=(RANDOM % 4)有问题,退出码为1。
为什么 RANDOM 变量会产生这种随机错误?我该如何解决?
【问题讨论】:
-
如果你使用
let index=($RANDOM % 4)会发生什么? -
没关系,我观察到两种组合的行为相同。一个简单的触发测试:
for i in {1..10}; do { let test=($RANDOM % 4) && echo $test; } || break; done。它将尝试 10 次(在我的情况下肯定会失败),在第一次失败时中断。 -
如果使用传统的算术扩展而不是
let,它不会失败。 -
@Oppen 你读过发布的答案了吗?
-
查看BashFAQ #105 中的练习,了解
bash -e使您的代码更难预测、更难移植、更依赖上下文和更难以可靠审查的各种方式。