Почему двойные двойные кавычки заставляют строку работать как функцию?

312
scrapy

Простая функция получает два аргумента и добавляет and, затем выводит их.

function myprint(){ echo "$1 and $2";} 

Оно работает.

myprint xx yy xx and yy 

Это строка, bash разбери ее отдельно.

"myprint xx yy" bash: myprint xx yy: command not found 

Почему двойные двойные кавычки заставляют строку работать как функцию?

""myprint xx yy"" xx and yy 
-1

1 ответ на вопрос

3
Kamil Maciorowski

Ваши "двойные двойные кавычки" на самом деле не являются вложенными. Дважды двойная кавычка открывается и закрывается сразу же.

""myprint xx yy"" ^^ this is one pair of quotes with empty content ^^ this is anther pair with empty content ^^^^^^^^^^^^^^^ this is not quoted at all 

По сути ""myprintэто команда с именем: пустая строка, соединенная с «myprint», это разрешает myprintфункцию; и последний аргумент - это строка "yy", соединенная с пустой строкой.

Таким образом, вы получаете без кавычек myprint xx yy. Вся оригинальная команда ведет себя как таковая.