--- a/bash_completion 2014-03-09 17:38:14 +0000 +++ b/bash_completion 2014-03-13 23:26:44 +0000 @@ -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