The shell-expand-line command (bound to Escape-Ctrl-E) incorrectly removes
quotation marks from
the command line, often resulting in a command that differs from what the
user intended to type.

I've seem this problem with all recent versions of bash, particularly
4.3.11 (preinstalled on
Linux Mint 17.2) and 4.4-beta (built from source on the same system).


Here's a demonstration:

$ /bin/bash --norc
bash-4.3$ uname -a
Linux bomb20 3.16.0-38-generic #52~14.04.1-Ubuntu SMP Fri May 8 09:43:57
UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
bash-4.3$ echo $BASH_VERSION
4.3.11(1)-release
bash-4.3$ bind -p | grep shell-expand-line
"\e\C-e": shell-expand-line
bash-4.3$ echol() { for word in "$@" ; do echo "$word" ; done ; }
bash-4.3$ echo foo bar
foo bar
bash-4.3$ echol 'string with spaces' !*     *# Here I typed just the
command you see; it worked.*
echol 'string with spaces' foo bar
string with spaces
foo
bar
bash-4.3$ echo foo bar
foo bar
bash-4.3$ echol string with spaces foo bar  *# Here I typed the same
command, then Escape-Ctrl-E*
string
with
spaces
foo
bar
bash-4.3$

I often type Escape-Ctrl-E to expand a history substitution in place
before typing Enter, but it has the side effect of stripping quotes from
what I've already typed.

-- 
Keith Thompson <keith.s.thomp...@gmail.com>

Reply via email to