Это модуль Z Shell, известный как "url-quote-magic" в действии. Он пытается гарантировать, что вы в конечном итоге получите то, что планировали, даже если вы полностью проигнорировали метасимволы оболочки и цитирование. Он определяет, когда (в ZLE) слово без кавычек выглядит как URL-адрес со схемой на лицевой стороне, и изменяет способ, которым самовставка символа происходит с остальной частью слова.
Если бы операция вставки просто вводила
http://example.com/?a=c
в редактор командной строки, вы бы получили команду, которая при запуске попыталась бы выполнить расширение имени файла, а не удалось выполнить , потому что имена файлов не совпадают. Хорошо известный пример Вивека Вермы :
~$ mpv https://www.youtube.com/watch?v=HcgJRQWxKnw zsh: no matches found: https://www.youtube.com/watch?v=HcgJRQWxKnw ~$
Помните: Z Shell имеет много символов расширения имени файла, включая не только ?
, [
, ]
и *
; но также =
(поиск имени команды), и
>
(диапазоны номеров), ~
, ^
и #
. И это даже не считая механизмов совместимости с оболочкой Korn. См. Довольно подробные сведения на странице руководства zshexpn .
url-quote-magic определил, что это не слово в кавычках, распознал префикс схемы http:
и изменил ?
и =
на \?
и \ =
, чтобы они не вызывали расширение имени файла.
Итак, если вы действительно не хотите, чтобы по какой-то причине, URL-адреса, которые вы вставили или набрали (без добавления каких-либо заключительных одинарных кавычек, примечание), должны были подвергаться всем расширениям имен файлов и либо не работают или (в редких случаях крайней неожиданности) дают неожиданные совпадения, вы, вероятно, должны порадоваться, что это автоматическое цитирование метасимволов оболочки в том, что вы явно считаете URL-адресами, делается за вас. ☺