Sample Header Ad - 728x90

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 echoing 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