此处文档中分隔符前面的反斜杠是什么意思 (cat <<\EOF)

kar*_*bal 7 shell shell-script

bash我在\xe2\x80\x99s 手册页中未提及的此处文档中遇到了以下语法

\n
cat <<\\EOF\nhello world\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n

手册页仅提及分隔符周围的引号及其-前面的 a 。那么这意味着什么呢?

\n

kar*_*bal 20

事实上,手册页对此进行了详尽的介绍,因为它写道

\n
\n

如果单词的任何部分被引用

\n
\n

其中 \xc2\xbbquoting\xc2\xab 可以是',"\\.\n\\EOF引号的任何运算符E,其作用与完全引用相同WORD,从而防止此处文档中的参数扩展。

\n
a="something"\ncat <<\\EOF\n$a\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n

\n
a="something"\ncat <<"EOF"\n$a\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n

两者都会导致

\n
$a\n
Run Code Online (Sandbox Code Playgroud)\n

而不是

\n
something\n
Run Code Online (Sandbox Code Playgroud)\n

就像这样

\n
cat <<EOF\n$a\nEOF\n
Run Code Online (Sandbox Code Playgroud)\n

事实上,由于WORD \xc2\xab 的 \xc2\xbbany 部分可以被引用,您甚至可以使用<<E\\OF,<<E"O"F<<EOF""

\n

  • 请注意,它引用触发该行为的分隔符的任何部分。引用运算符包括反斜杠、`'...'`、`"..."`(在某些 shell 中还有 `$'...'` / `$"..."`)。所以任何`cat &lt;&lt; \EOF`(仅`E`被引用),`cat &lt;&lt; E\OF`,与`cat &lt;&lt; E'O'F`相同,甚至`cat &lt;&lt; EOF''`会做。就我个人而言,我倾向于使用 `cat &lt;&lt; 'EOF'`,其中整个 `EOF` 都被引用,与 `cat &lt;&lt; \E\O\F` 相同 (5认同)
  • 等等,双引号 `"EOF"` 也会抑制变量扩展吗?这有点出乎意料。 (3认同)