Here-string 提供文本并追加换行
Bash 的 here-string 会把一个词展开后的值送给命令的标准输入,并在末尾追加一个换行符。当变量里已经有少量文本,而目标程序从标准输入读取时,这种写法很方便。它省掉了额外的打印命令,但并不保证输入与变量逐字节相同,也不承诺内部一定使用内存、管道或文件。判断是否适用,应看接收方需要什么输入,而不是只比较命令行长度。 Bash 先构造展开后的字符串并无条件追加换行,然后接收方按自己的规则解析。重定向本身不创建子 shell,也不承诺内部存储方式。 接收命令读取之前先完成展开 三个小于号之后的词可以包含变量展开、算术展开和命令替换,因此不一定是字面常量。单引号保留源码中的字面文本,双引号则允许通常的变量和命令展开。通过变量展开得到的字符串,即使包含美元符号和括号,也不会仅因出现在 here-string 中就被再次作为 shell 命令执行。源码中明确写出的替换语法与变量保存的数据必须区分。 当前 Bash 不会对 here-string 的词执行分词或文件名展开,而是把结果作为一个字符串交付。这里引用变量仍能清楚表达意图,但不能把这种重定向上下文和普通命令参数位置混为一谈。后者使用未引用变量时仍可能按空白拆分,或把星号变成文件名。因此,某个值通过 here-string 正常到达,并不能证明在别处省略引号也安全。 ...