Shell script印刷内容的变量包含输出的命令删除newline characters[重复]

StackOverflow https://stackoverflow.com/questions/1483721

  •  18-09-2019
  •  | 
  •  

这个问题已经有一个答案在这里:

我写脚本,这将商店出的命令在一个可变、过程的输出,以及后来回波的结果。这里就是我得到了:

stuff=$(diff -u pens tape)
# process the output
echo $stuff

问题是,输出我得到运行,从脚本是这样的:

--- pens 2009-09-27 10:29:06.000000000 -0400 +++ tape 2009-09-18 16:45:08.000000000 -0400 @@ -1,4 +1,2 @@ -highlighter -marker -pencil -POSIX +masking +duct

而我是希望这样的:

--- pens 2009-09-27 10:29:06.000000000 -0400
+++ tape 2009-09-18 16:45:08.000000000 -0400
@@ -1,4 +1,2 @@
-highlighter
-marker
-pencil
-POSIX
+masking
+duct

它看起来像newline人物被拆除以某种方式。我怎么让他们说吗?

有帮助吗?

解决方案

如果你想保护的新行,将可变双引号

echo "$stuff"

当你写它没有双引号,扩大壳 $stuff 进入空间的分离名单的词(其中,'话'是指一系列的非空间的文字,以及空间字是空白和标签和新行;在实验,这似乎构成饲料、运输返回和返回的空间都不算作空间)。


证明口译的控制字为空白。ASCII8backspace、9卡,10个是新线(LF),11个是竖直的标签,12形式是饲料、13回车。第一命令产生一个字符序列的分隔的各种控制人物。第二个命令相呼应的结果与原来的字符的保留-参见第六角的垃圾场。第三次命令相呼应的结果与壳分割的话;你可以看到,tab and newline被取代的空白(0x20).

$ x=$(./ascii 64 65 8 66 67 9 68 69 10 70 71 11 72 73 12 74 75 13 76 77)
$ echo "$x" | odx
0x0000: 40 41 08 42 43 09 44 45 0A 46 47 0B 48 49 0C 4A   @A.BC.DE.FG.HI.J
0x0010: 4B 0D 4C 4D 0A                                    K.LM.
0x0015:
$ echo  $x  | odx
0x0000: 40 41 08 42 43 20 44 45 20 46 47 0B 48 49 0C 4A   @A.BC DE FG.HI.J
0x0010: 4B 0D 4C 4D 0A                                    K.LM.
0x0015:
$ 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top