Прямой ответ на оригинальный вопрос: это не так. (Я не получаю кредит за это; ФП упомянул это при редактировании вопроса.)
Как сказал ОП при редактировании вопроса, это определенно команда open
, а не Perl или system()
, которая делает это (и использование одинарных, а не двойных кавычек не должно иметь никакого значения).
Обратите внимание, что open
, похоже, относится только к MacOS (в моей системе Ubuntu есть команда open
, но это не одно и то же). Вот справочная страница .
Часть объяснения состоит в том, что %23
является шестнадцатеричным представлением символа '#"
. URL-адреса обычно используют этот механизм для экранирования символов, которые иначе имели бы какое-то значение в URL-адресе Например, введя "foo#bar"
в поле поиска google.com, получим этот URL: http://www.google.com/search?q=%22foo%23bar%22.
Вопрос в том, почему open
заменяет '#'
на %23
, когда должно рассматриваться как метасимвол? Это может быть ошибка в open
, или может быть способ обойти ее. Возможно, кто-то более знакомый с MacOS может помочь с этим.
Просто дикое предположение: что произойдет, если вы наберете
open 'http://www.google.com/\#source=hp&q=中文'
в командной строке?