我试图在脚本中按 Ctrl D 但我弄坏了它?

I tried to press Ctrl D in script and I broke it?

我写了一个带有无限循环的简单脚本来测试一些东西。这是脚本:

#!/bin/bash

while true; do
    echo -n "Give a number: "; read number
done

然后 运行 我的脚本,它仍然是 运行ning,我按了 Ctrl+D,它坏了! 这是输出:

user@DESKTOP:~$ ./test.sh
Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: Give a number: ^C

我该如何防止这种情况发生?谢谢...

您希望在读取失败时跳出循环:

read number || break;

当读取检测到错误时,它returns非零,在shell中是"false"。 || 会看到左边的 false,从而继续计算右边的值,但是当 read 成功返回零时,|| 将不会计算右边的值,从而允许循环继续。

解决这个问题的优雅方法是:

while read -p 'Give a number: ' number; do
   ...
done

如果用户使用 Ctrl+D 关闭标准输入,则 read 命令以非零状态退出,这会导致循环退出。 不需要额外的 echo -nread 可以使用 -p 选项自行提示。