Ale*_*der 6 shell here-document
在我大学的一次 shell 脚本测试中,我被问到以下问题,但从未给出答案,而 google 几乎没有帮助。
问:应该使用什么行分隔符来结束这个 here-document?
fff=file
xyz <<\\$fff
...
Run Code Online (Sandbox Code Playgroud)
结束此处文档的行是
\$fff
Run Code Online (Sandbox Code Playgroud)
从man bash
Here Documents 部分:
here-document 的格式为:
<<[-]word
here-document
delimiter
Run Code Online (Sandbox Code Playgroud)
不会对 word 执行参数和变量扩展、命令替换、算术扩展或路径名扩展。如果word中的任何字符被引用,则分隔符是对word去除引用的结果,并且here-document中的行不展开。如果单词是无引号中,这里的文档的所有行进行参数扩展,命令替换和算术扩展,字符序列\newline被忽略,\必须使用来引用字符\,$和`。
word
确实进行了报价删除,因此\\$fff
被取消引用为\$fff
. 但是,正如联机帮助页所说,没有进行变量扩展,所以它保持这种状态。
此处文档的正文可能会也可能不会进行变量扩展和反斜杠解释。在这种情况下,由于word
包含带引号的字符(即反斜杠),因此不会对 here 文档的文本进行参数扩展和反斜杠去引号。
但是,输入与变量扩展之前的终止序列进行比较,因此不必在终止行中反斜杠转义 the\或 the $。