Bash: History expansion inside single quotes after a double quote inside the same line
6
votes
1
answer
379
views
I took a closer look on this phenomenon after I stumbled over it in two other questions today. I've tried all of this with the default
set -H
(history expansion on).
To test a script, I often do things like echo
ing a multi-line string and pipe it through a script, but in some cases it gives an error:
$ echo "foo
bar" | sed '/foo/!d'
bash: !d': event not found
>
The !
seems to trigger history expansion, although it is enclosed with single quotes. The problem seems to be the occurrence of the double quote in the same line, because
$echo $'foo\nbar' | sed '/foo/!d'
works as well as
$echo "foo
bar" |
> sed '/foo/!d'
My suspicion: History expansion is applied linewise, so the '
after a single "
is considered to be escaped, so the following !
is not escaped.
Now my question: Is this a bug or expected behavior? Reproduced with bash
versions 4.2.30 and 4.4.12.
Asked by Philippos
(13680 rep)
Sep 7, 2017, 12:23 PM
Last activity: Mar 17, 2022, 04:00 PM
Last activity: Mar 17, 2022, 04:00 PM