2012-02-24 14 views
0

я только что узнал, что, цитирую сделать огромную разницу в некоторых случаях, и я сделал что-то, чтобы проверить это, вот то, что я только что сделал,оболочки со ссылкой на поведение

$ 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 строки?

ответ

4

Любые пробелы обычно находятся в оболочке, которая считается разделителем аргументов. Таким образом, ваш первый пример имеет два аргумента. echo печатает аргументы, разделенные одним пробелом, и это поведение, которое вы видите во втором примере.

Однако, когда вы используете цитаты, между ними есть один аргумент, и он печатается буквально. Один аргумент в вашем первом примере уже содержит новую строку, поэтому он печатается с новой строкой.

Вариант -e от bashecho встроенный регулирует расширение escape-последовательностей, например \n; однако у вас нет никаких управляющих последовательностей. Переменная содержит литерал новой строки.

Смежные вопросы