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

问题描述

我想将更长的文本放入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上的输出(目录./testfile.txt):

ab

在Ubuntu 20.04上的输出

a\ b

为什么输出不同?

PS:使用EOF而不是'EOF'时,两种版本的输出均相同:

ab

解决方法

这是版本5.0中的错误修复:

kk。修复了导致bash从中删除反斜杠-换行符对的错误 此处文档的主体,在命令中带有引号的定界符 替代。

在4.4中,它被删除,以便cat看到ab在其输入中紧邻。现在,它们被保留了,但是反斜杠是param值中的文字字符,并且在分词过程中丢弃了以下换行符,因此输出了词a\becho隔开。

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

$ echo "$param"
a\
b

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...