相关疑难解决方法(0)

POSIX 在命令替换中引用此处的文档需要什么?

如何将 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)

那么它们的行为不再相同:

  • dashashzshksh93、 BusyBox ashmksh和 SunOS 5.10 POSIXsh都像以前一样给出了文档的逐字内容。
  • Bash 3.2 给出了一个不匹配的反引号的语法错误。使用匹配的反引号,它尝试将内容作为命令运行。
  • Bash 4.3 将“ghi”和“jkl”折叠成一行,但没有错误。该--posix选项不影响此。Kusalananda告诉我(谢谢!)它的pdksh行为方式相同

在最初的问题中,我说这是 Bash …

shell-script posix command-substitution here-document

21
推荐指数
1
解决办法
1938
查看次数