将命令输出分配给变量时丢失最后的空白行
Losing final blank lines when assigning command output to a variable
[bash 3.2.57(1) 在 OSX 10.11.6]
我神秘地丢失了一个变量中的结束空行,我已将命令的输出分配给该变量,该命令的输出以几个空行结尾。
[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
设置为执行命令的结果时,我该怎么做才能保留它们? (我的真实命令不仅仅是 echo,但 echo 是一个很好的最小示例。)为什么当我使用变量的值而不是命令的输出时它会起作用?
这实际上是预期的行为。
在此处查看http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html
注意这里说的是什么
Bash 通过在子 shell 环境中执行命令并将命令替换替换为命令的标准输出来执行扩展,删除任何尾随换行符。
要解决这个问题,你可以使用这个技巧(我们在字符串的末尾添加一个字母,以便保留它之前的行,然后将其删除)
r=`echo "$p"n`
rr=${r::-1}
echo "$rr"
[bash 3.2.57(1) 在 OSX 10.11.6]
我神秘地丢失了一个变量中的结束空行,我已将命令的输出分配给该变量,该命令的输出以几个空行结尾。
[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
设置为执行命令的结果时,我该怎么做才能保留它们? (我的真实命令不仅仅是 echo,但 echo 是一个很好的最小示例。)为什么当我使用变量的值而不是命令的输出时它会起作用?
这实际上是预期的行为。
在此处查看http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html
注意这里说的是什么
Bash 通过在子 shell 环境中执行命令并将命令替换替换为命令的标准输出来执行扩展,删除任何尾随换行符。
要解决这个问题,你可以使用这个技巧(我们在字符串的末尾添加一个字母,以便保留它之前的行,然后将其删除)
r=`echo "$p"n`
rr=${r::-1}
echo "$rr"