如何结束以

如何结束以

我在大学进行的 shell 脚本测试中被问到了以下问题,但从未给出答案,谷歌也没有什么帮助。

问:用于结束此此处文档的行分隔符是什么?

fff=file
xyz <<\\$fff
...

答案1

此处文档结束的行是

\$fff

来自man bash此处文档部分:

这里文档的格式是:

          <<[-]word
                  here-document
          delimiter

无参数和变量扩展、命令替换、算术扩展或路径名扩展在word上执行。如果word中的任何字符被引用,则分隔符是word删除引号的结果,并且此处文档中的行不会被扩展。如果 word 不加引号,则此处文档的所有行都会进行参数扩展、命令替换和算术扩展,字符序列\newline将被忽略,并且\必须用于引用字符\$`

word确实经历了引号删除,因此\\$fff被取消引用为\$fff.但是,正如手册页所说,没有进行变量扩展,因此它保持这种状态。

这里文档的主体可能会也可能不会进行变量扩展和反斜杠解释。在这种情况下,由于word包含带引号的字符(即反斜杠),因此参数扩展和反斜杠反引号是不是对此处文档的文本执行。

但是,在变量扩展之前将输入与终止序列进行比较,因此无需在终止行中对\和进行反斜杠转义。$

答案2

终结者是

\$fff

我假设这就是@rici 的意思。正如他的倒数第二段所说,

word确实经历了引号删除,因此\\$fff被取消引用为\$fff.但是,正如手册页所述,没有进行变量扩展,因此它保持这种状态。

相关内容