Bash 带有反斜杠的 herefile 在 ubuntu 18.04 和 20.04 上有不同的结果?

Bash herefile with backslash different result on ubuntu 18.04 and 20.04?

我想将更长的文本放入 shellscript 变量中,并使用 herefile 和反斜杠,如下例所示。我看到 ubuntu 18.04 和 ubuntu 20.04 有不同的行为(都使用 /bin/bash, utf-8:

param="$(cat <<'EOF'
a\
b
EOF
)"
echo $param > ./testfile.txt

ubuntu 18.04 上的输出 (cat ./testfile.txt):

ab

ubuntu 20.04 上的输出:

a\ b

为什么输出不同?

PS:使用 EOF 而不是 'EOF' 两个版本的输出都是:

ab

这是 5.0 版中的错误修复:

kk. Fixed a bug that caused bash to remove backslash-newline pairs from the body of a here-document with a quoted delimiter inside a command substitution.

在 4.4 中,它被删除了,因此 cat 在其输入中看到 ab 紧邻。现在,它们被保留了下来,但是反斜杠在 param 的值中是一个文字字符,并且在 word-splitting 期间丢弃了后面的换行符,所以单词 a\becho 输出,由单个 space.

分隔

如果你引用 $param,你会看到换行符。

$ echo "$param"
a\
b