Using the sample command below in curl, it doesn't work as expected:
curl -ik "http://localhost/index.php?username=parto&password=hello!23"
I expect the parameters to be passed to include:
username = parto
password = hello!23
But the part !23
in the password is interpreted as a history event designator. If the 23rd command is sudo apt-get update
, the commands becomes:
curl -ik "http://localhost/index.php?username=parto&password=hellosudo apt-get update"
Event Designators An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list.
>! 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.
Without using extra characters as depicted in the man page (quoted above), how can we 'tell' the terminal NOT to interpret the command above (!23) as an event designator?
set +o histexpand
orset +H