Используя демонстрационную команду ниже в завихрении, это не работает как ожидалось:
curl -ik "http://localhost/index.php?username=parto&password=hello!23"
Я ожидаю, что параметры будут переданы для включения:
username = parto
password = hello!23
Но часть !23
в пароле интерпретируется как указатель события истории. Если 23-я команда sudo apt-get update
, команды становятся:
curl -ik "http://localhost/index.php?username=parto&password=hellosudo apt-get update"
Указатели события указатель события являются ссылкой на запись командной строки в списке предыстории. Если ссылка не является абсолютной, события относительно текущей позиции в списке предыстории.
>! Start a history substitution, except when followed by a blank,
newline, = or (.
!n Refer to command line n.
!-n Refer to the current command minus n.
!! Refer to the previous command. This is a synonym for `!-1'.
!string
Refer to the most recent command preceding the current
position in the history list starting with string.
!?string[?]
Refer to the most recent command preceding the current
position in the history list containing string. The trailing
? may be omitted if string is followed immediately by a
newline.
^string1^string2^
Quick substitution. Repeat the last command, replacing
string1 with string2. Equivalent to ``!!:s/string1/string2/''
(see Modifiers below).
!# The entire command line typed so far.
Не используя дополнительные символы, как изображено в странице справочника (заключенный в кавычки выше), как может, мы 'говорим' терминалу НЕ интерпретировать команду выше (! 23) как указатель события?
Нет никакого пути, как использовать восклицательный знак в двойных кавычках. Обратная косая черта это закрыло кавычки, или одинарные кавычки использования вместо двойных кавычек, как специальные символы, не расширена в одинарных кавычках.
curl -ik "http://localhost/index.php?username=parto&password=hello"\!"23"
curl -ik 'http://localhost/index.php?username=parto&password=hello!23'