【发布时间】:2013-06-04 04:24:45
【问题描述】:
谁能解释一下为什么这两个命令的输出不同?
$ echo "NewLine1\nNewLine2\n"
NewLine1
NewLine2
<-- Note 2nd newline here
$ echo "$(echo "NewLine1\nNewLine2\n")"
NewLine1
NewLine2
$ <-- No second newline
有什么好的方法可以将新行保留在 "$( .... )" 中的输出末尾吗?我考虑过只添加一个虚拟字母并将其删除,但我很想了解为什么这些新行会消失。
【问题讨论】:
-
它的回声本质是消耗空白。我现在没有时间进行测试,但是您对问题测试的 dbl-quotes 可能没有按照您的想法进行。也许
echo "$(echo \"NewLine1\nNewLine2\n\")"会起作用。祝你好运。 -
谢谢,但您不需要在 "$(....)" 语句的括号内转义双引号。它被视为一个新命令。这是使用 $(...) 而不是 ticks ``的优点之一。上述问题也可以通过使用刻度来重现。
-
记录在案的行为:(gnu.org/software/bash/manual/bashref.html#Command-Substitution) -- “...命令的标准输出,所有尾随换行符都被删除”。为了解决这个问题,您可能必须将输出重定向到临时文件,然后使用该文件。
-
这是一个很好的解释。这有点令人沮丧,因为我有一个脚本,其中 "$( ... )" 语句末尾的新行对我很重要。就像我上面说的,我可能会附加一个随机字母,然后将其剥离。
-
@glennjackman:您应该将其发布为答案。