[OSX 10.11.6上的bash 3.2.57(1)]
我神秘地丢失了一个变量中的空白行,我在该变量中指定了一个以几个空白行结尾的命令的输出。
[1] $ p="next line is blank
next several lines are blank
"
[2] $ echo $p
next line is blank next several lines are blank
[3] $ echo "$p"
next line is blank
next several lines are blank
[4] $ q="$p"
[5] $ echo "$q"
next line is blank
next several lines are blank
[6] $ r=`echo "$p"`
[7] $ echo "$r"
next line is blank
next several lines are blank
[8] $
[1]到[6]中发生的一切都符合预期。
但[7]令人困惑。最后一行在哪里,当我将r
设置为执行命令的结果时,我该怎么做才能保留它们? (我的真正命令不仅仅是回声,但回声是一个很好的最小例子。)为什么当我使用变量的值而不是命令的输出时这是有用的?
答案 0 :(得分:1)
这实际上是预期的行为。
点击http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html
注意它在这里说的是什么
Bash通过在子shell环境中执行命令并使用命令的标准输出替换命令替换来执行扩展,删除任何尾随换行符。
要解决它你可以做这个技巧(我们在字符串的末尾添加一个字母,所以我们保留它之前的行然后我们删除它)
r=`echo "$p"n`
rr=${r::-1}
echo "$rr"