diff -Naur -x '*~' bash-completion-2.1/bash_completion bash-completion-2.1-fix-readline-quoting/bash_completion --- bash-completion-2.1/bash_completion 2013-04-05 12:55:51.000000000 +0200 +++ bash-completion-2.1-fix-readline-quoting/bash_completion 2014-03-18 20:43:15.922496482 +0100 @@ -536,13 +536,23 @@ # @param $2 Name of variable to return result to _quote_readline_by_ref() { - if [[ $1 == \'* ]]; then + if [ -z "$1" ]; then + # avoid quoting if empty + printf -v $2 %s "$1" + elif [[ $1 == \'* ]]; then # Leave out first character printf -v $2 %s "${1:1}" + elif [[ $1 == ~* ]]; then + # avoid escaping first ~ + printf -v $2 ~%q "${1:1}" else printf -v $2 %q "$1" fi + # Replace double escaping ( \\ ) by single ( \ ) + # This happens always when argument is already escaped at cmdline, + # and passed to this function as e.g.: file\ with\ spaces + [[ ${!2} == *\\* ]] && printf -v $2 %s "${1//\\\\/\\}" # If result becomes quoted like this: $'string', re-evaluate in order to # drop the additional quoting. See also: http://www.mail-archive.com/ # bash-completion-devel@lists.alioth.debian.org/msg01942.html