linux - 为什么使用 bash -e 运行时 "let"有时会退出?

标签 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:~/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=(RANDOM % 4)有问题,退出代码为 1。

为什么 RANDOM 变量会产生这个随机错误?我该如何修复它?

最佳答案

使用 -e 会导致 bash 因错误而终止。

let 的计算结果为 0 时,将被视为错误。 Bash 将在打印值 0 之前终止脚本。


为避免意外终止,您可以使用以下方法之一:

  1. 不要使用-e标志

  2. 确保语句始终成功:

let 'index=(RANDOM % 4)' || true

let 'index=(RANDOM % 4)' || :
  • 避免使用 let(根据 @LéaGris):
  • index=$((RANDOM % 4))
    

    关于linux - 为什么使用 bash -e 运行时 "let"有时会退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61515205/

    相关文章:

    linux - 如何获取 iostat 第二个样本

    c++ - 创建不同类型 DNS 记录的消息

    linux - 执行脚本时没有那个文件或目录

    bash - 如何在 gnuplot 中将 .png 图发送到标准输出?

    linux - 您将如何处理需要输入、想要查看输出并且还想要在 bash 中写入文件的情况?

    在变量中使用文件描述符或文件名的 Bash 重定向

    linux - 操作系统如何知道缺失页面的磁盘地址?

    linux - 在 Linux 中下载特定格式的完整播放列表

    linux - linux下如何修改文件的访问权限

    用于接收和重新传递引用参数的 Bash 脚本