2012-02-24 44 views
0

我刚刚得知,报价作出某些情况下,一个巨大的差异,我做了一些测试它,这里就是我刚刚做,shell引用行为

$ xfs=$(find . -type f -perm -111) #find all files with x-perm 
$ echo "$xfs" 
./b.out 
./a.out 
$ echo $xfs 
./b.out ./a.out #why all in one line, but the above takes two? 

如果$xfs包含\n,据我所知,echo -e将扩大\n,但echo "$xfs"如何取两行?

回答

4

任何空格通常在shell中被认为是参数分隔符。因此,你的第一个例子有两个参数。 echo打印由一个空格分隔的参数,这就是您在第二个示例中看到的行为。

但是,当您使用引号时,它们之间的任何内容都是一个参数,并且从字面上打印出来。你的第一个例子中的一个参数已经包含一个换行符,所以它用一个换行符打印。

bashecho-e选项可调节逃逸序列的扩增,如\n;但是,您没有任何转义序列。该变量包含一个文字换行符。