Sergiy Kolodyazhnyy Asked: 2018-06-05 15:27:17 +0800 CST2018-06-05 15:27:17 +0800 CST 2018-06-05 15:27:17 +0800 CST 破折号,命令替换不插入换行符? 772 基本上,这是一个问题: $ echo Hello"$(printf '\n')"World HelloWorld 我忽略了什么? command-line dash-shell 1 个回答 Voted Best Answer steeldriver 2018-06-05T15:43:44+08:002018-06-05T15:43:44+08:00 这种行为实际上是命令替换的 POSIX 规范的一部分: shell 应通过在子 shell 环境中执行命令来扩展命令替换(请参阅 Shell 执行环境)并用命令的标准输出替换命令替换(命令文本加上封闭的“$()”或反引号),删除替换结束时的一个或多个字符的序列。输出结束前的嵌入字符不得删除;但是,它们可能被视为字段分隔符并在字段拆分期间被消除,具体取决于 IFS 的值和有效的引用。如果输出包含任何空字节,则行为未指定。 所以正常的引用规则"$(...)"只保留非尾随换行符。 在shell中给出了一些保留尾随换行符的建议:keep trailing newlines ('\n') in command substitution 另请参阅打印包含换行符的变量时,为什么最后一个换行符被剥离?讨论规范背后的基本原理。
这种行为实际上是命令替换的 POSIX 规范的一部分:
所以正常的引用规则
"$(...)"
只保留非尾随换行符。在shell中给出了一些保留尾随换行符的建议:keep trailing newlines ('\n') in command substitution
另请参阅打印包含换行符的变量时,为什么最后一个换行符被剥离?讨论规范背后的基本原理。