6

Недавно переключившись с bash, я заметил, что zsh будет пытаться развернуть каждую команду или аргумент, который выглядит так, как будто в нем есть символы подстановки. Таким образом, следующие строки больше не будут работать:

git diff master{,^^}
zsh: no matches found: master^^

scp remote:~/*.txt .
zsh: no matches found: remote:~/*.txt

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

Q: Как мне настроить zsh чтобы он по-прежнему пытался расширить подстановочные знаки, но если совпадений нет, просто передайте аргумент как есть?

РЕДАКТИРОВАТЬ: Возможно связано: scp с zsh: совпадений не найдено

2 ответа2

5

Это предназначенная особенность Zsh. при использовании любой оболочки считается наилучшей практикой заключать в кавычки любой символ, который считается метасимволом. ^ - это шаблон, используемый для отрицания строки, когда установлена опция extendedglob . * это шаблон, используемый для соответствия нулю или более символов.

Вы можете остановить это, отключив параметр nomatch . Но при этом ваши шаблоны без кавычек делают ваши операторы изменчивыми, в зависимости от того, какие файлы могут присутствовать в текущем рабочем каталоге. Ты не должен этого делать.

0

Для scp см. Https://superuser.com/a/431568

Для git используйте ~ вместо ^ .

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