В чем разница между '* .txt' и * .txt?

Если вы хотите избежать необходимости использовать sudo или изменять файл конфигурации sudoers, вы можете использовать:

sudo chown root:root path/to/command/COMMAND_NAME
sudo chmod 4775 path/to/command/COMMAND_NAME

Это заставит команду выполняться от имени пользователя root без необходимости использования sudo.

0
28.08.2017, 13:35
2 ответа

Это то же самое в оболочке, что и в других грамматиках, которые вы упомянули. Строка с одинарными кавычками будет рассматриваться как "строковый литерал" (так сказать).

Разница между git add '*.txt'и git add *.txtзаключается в том, кто выполняет сопоставление шаблона с именами файлов.

В случае git add '*.txt', gitвыполняет сопоставление с образцом. Поскольку оболочка не будет расширять строковый литерал '*.txt', git addбудет вызываться с одним аргументом, *.txt. gitзатем выполняет сопоставление с именами файлов, доступными во всем репозитории(потому что... git).

В случае git add *.txtоболочка выполняет сопоставление имен файлов и передает список совпадающих имен файлов из текущего каталогав git add. Обратите внимание, что если нет имен, соответствующих заданному шаблону, оболочка (обычно 1) передаст шаблон в git addбез расширения.Если это произойдет, результат будет таким же, как если бы паттерн был процитирован.

1Обычно, но см., например, параметр оболочки failglobв bash. См. также комментарии к этому ответу.


Когда git addполучает имя файла pattern, он добавит не только файлы, совпадающие в текущем каталоге, но и добавит все файлы, совпадающие во всем репозиторий(т.е. включая любые подкаталоги). Вот почему текст в правом нижнем углу говорит

Подстановочные знаки:

Нам нужны кавычки, чтобы Git получил подстановочный знак до того, как наша оболочка сможет вмешаться в него. Без кавычек наша оболочка будет выполнять поиск по подстановочным знакам только в текущем каталоге. Git получит список файлов, найденных оболочкой вместо подстановочного знака, и не сможет добавить файлы в каталог octofamily.

7
28.01.2020, 02:13

Одинарные кавычки предотвращают расширение подстановки и переменной оболочкой, а двойные кавычки предотвращают только подстановку, а не расширение переменной.

*.txtрасширится по оболочке и выдаст список всех .txtфайлов. но цитирование '*.txt'предотвратит это. см. ниже примеры.

echo *.txt
a.txt b.txt c.txt

echo '*.txt'
*.txt
1
28.01.2020, 02:13

Теги

Похожие вопросы