Linux “为什么?”;让我们;有时在运行bash-e时退出?
a.sh的内容是Linux “为什么?”;让我们;有时在运行bash-e时退出?,linux,bash,Linux,Bash,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:~/tes
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”,而不输出索引,这意味着let index=(随机%4)
有错误,退出代码为1
为什么随机变量会产生这种随机误差?如何修复它?使用
-e
会导致bash
在出现错误时终止
当let
的计算结果为0
时,它被视为错误。Bash将在打印值0
之前终止脚本
为避免意外终止,您可以使用以下方法之一:
-e
标志let
(根据@LéaGris):如果使用
let index=($RANDOM%4)
,会发生什么情况?不管怎样,我观察到这两种组合都有相同的行为。一个简单的触发测试:{1..10}中i的;do{let test=($RANDOM%4)和&echo$test;}| | break;完成
。它将尝试10次(在我的例子中足够失败),在第一次失败时中断。如果使用传统的算术扩展而不是的话,它不会失败。让@Oppen你读了发布的答案了吗?请参阅中的练习,关于bash-e
使你的代码不那么可预测,不那么可移植,更依赖于上下文,更难可靠地检查。为了保护算术表达式不返回失败,请改用以下形式:bash-ec'表示{1..10}中的i;do{test=$((随机%4));echo$test;}| | break;“完成”
我未能说明我理解-e
标志的含义,但我无权删除此标志。这是GitHub操作中的默认标志,它们这样做是有原因的。但是非常感谢您对let
的解释。
let 'index=(RANDOM % 4)' || true
let 'index=(RANDOM % 4)' || :
index=$((RANDOM % 4))