外壳脚本印刷含有一个命令的输出变量的内容删除换行符[重复](Shell script printin

2019-08-16 22:10发布

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

  • 捕获多个线输出到击变量 6个答案

我正在写一个shell脚本,将一个命令的输出存储在一个变量,过程的输出,后来呼应的结果。 下面是我得到了什么:

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

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

--- 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

它看起来像被莫名其妙地删除的换行符。 如何让他们在说什么?

Answer 1:

如果您希望保留换行符,双引号引起的变量:

echo "$stuff"

当你写它没有双引号,shell取得$stuff成单词(其中“字”是的非空格字符序列的空间分隔的列表,以及空格字符是空格和制表符和换行符;在实验中,看来,形式,回车和后端空间不计入空间)。


演示的控制字符解释为空白。 ASCII 8是退格,图9是选项卡,10是新行(LF),11是垂直制表符,12是进纸,13是回车。 所述第一命令生成由各种控制字符分隔的字符序列。 第二个命令与保存的原始字符的结果相呼应 - 看到十六进制转储。 第三个命令呼应与壳分离的词语的结果; 你可以看到,标签和换行符被空(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:
$ 


文章来源: Shell script printing contents of variable containing output of a command removes newline characters [duplicate]
标签: linux shell echo