-1

Простая функция получает два аргумента и добавляет 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

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

""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 . Вся оригинальная команда ведет себя как таковая.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .