在如何将 HEREDOC 文本带入 shell 脚本变量中?有人报告了一个问题,使用here 文档在$(...)
命令替换内使用带引号的分隔符,其中\
文档内行尾的反斜杠触发换行符连接行继续,而命令替换外的相同 here 文档按预期工作。
这是一个简化的示例文档:
cat <<'EOT'
abc ` def
ghi \
jkl
EOT
Run Code Online (Sandbox Code Playgroud)
这包括一行末尾的一个反引号和一个反斜杠。分隔符被引用,因此正文内部不会发生扩展。在所有 Bourne-alikes 中,我可以找到逐字输出内容。如果我将相同的文档放在命令替换中,如下所示:
x=$(cat <<'EOT'
abc ` def
ghi \
jkl
EOT
)
echo "$x"
Run Code Online (Sandbox Code Playgroud)
那么它们的行为不再相同:
dash
、ash
、zsh
、ksh93
、 BusyBox ash
、mksh
和 SunOS 5.10 POSIXsh
都像以前一样给出了文档的逐字内容。--posix
选项不影响此。Kusalananda告诉我(谢谢!)它的pdksh
行为方式相同。在最初的问题中,我说这是 Bash …