shell引用行为

时间:2012-02-24 07:31:13

标签: linux shell quoting

我刚刚了解到,引用在某些情况下会产生巨大的差异,我做了一些测试,这就是我刚刚做的事情,

$ 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,AFAIK,echo -e将展开\n,但echo "$xfs"如何占用2行?

1 个答案:

答案 0 :(得分:4)

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

但是,当您使用引号时,它们之间的任何内容都是一个参数,并且字面打印。第一个示例中的一个参数已包含换行符,因此使用换行符打印。

来自-e bash内置的echo选项可以调整\n之类的转义序列的扩展。但是,您没有任何转义序列。该变量包含一个文字换行符。