bash使用退出代码1读取返回值,即使它按预期运行

我有这个构造来初始化一个文件的内容的variables:

echo "yyy" > xxx read -r -d '' PAYLOAD <<< $(cat xxx) echo $? echo $PAYLOAD 

这导致:

 1 yyy 

为什么读取返回1? 这是打破我的脚本,因为我运行set -e

read返回1,因为只有在没有遇到文件结束时它才返回0

根据help read

 Exit Status: The return code is zero, unless end-of-file is encountered 

你甚至不需要在这里read ,只需使用$(<file)将文件内容读入一个变量:

 echo "yyy" > xxx payload=$(<xxx) echo $? echo "$payload" 

建议不要使用所有的大写变量名称,以避免与ENV变量冲突。