Linux 为什么bash在遇到read命令时使用参数-e(set-e)停止?

Linux 为什么bash在遇到read命令时使用参数-e(set-e)停止?,linux,bash,Linux,Bash,下面是一个带有参数(set-e)的简单脚本: #/bin/bash set-e 回声“开始” read-r-d''var因为您指定了-d''(没有定界符),所以没有完整的输入行,所以read总是命中EOF并返回非零。-d''表示NUL定界符,不是吗?我从这个答案中得到了这个heredoc示例。它在没有(set-e)的情况下可以正常工作,但我也希望在出现错误的情况下停止执行。我该怎么做?使用set-e捕获错误不是很可靠。看,我不明白你为什么在这里使用read。如果您想使用不带分隔符的read,那么

下面是一个带有参数(set-e)的简单脚本:

#/bin/bash
set-e
回声“开始”

read-r-d''var因为您指定了
-d''
(没有定界符),所以没有完整的输入行,所以read总是命中EOF并返回非零。

-d''
表示NUL定界符,不是吗?我从这个答案中得到了这个heredoc示例。它在没有(set-e)的情况下可以正常工作,但我也希望在出现错误的情况下停止执行。我该怎么做?使用
set-e
捕获错误不是很可靠。看,我不明白你为什么在这里使用
read
。如果您想使用不带分隔符的read,那么在没有分隔符的情况下也可以轻松地进行赋值。只需执行
var='some multi-line string'
只需更改您的命令,如
read-r-d''FOO,正如@Grisha建议添加“| |::”,我将添加“| | true”以使其更具可读性。它与“set-e”命令完美配合。谢谢大家。或者把它放在set-e之前
#!/bin/bash

set -e

echo "begin"
read -r -d '' var <<- EOF
    echo "hello"
EOF
echo "${var}"