поведение цитирования оболочки - PullRequest
0 голосов
/ 24 февраля 2012

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

$ 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 Ответ

4 голосов
/ 24 февраля 2012

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

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

Опция -e из встроенной функции bash echo регулирует расширение escape-последовательностей, таких как \n; однако у вас нет никаких escape-последовательностей. Переменная содержит буквенный перевод строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...