Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have this on the command line:

 ln -sf $PWD/wine-

and then I hit tab to complete the filename. In earlier versions of Ubuntu, this worked just fine to complete the wine- filename (and as a side-effect $PWD would be expanded at that time). But now it turns it in to

 ln -sf \$PWD/wine-

which isn't what I meant at all and doesn't complete anything as the file does not literally start with $.

How do I get completion back to the less broken behaviour?

set tells me these are my current settings:

share|improve this question
If you are affected by this bug please consider voting under the following url (requires login):… – cripton May 24 '12 at 17:03
up vote 15 down vote accepted

I've found that bash versions >= 4.2.29 have a new direxpand shopt setting. (See man docs/bash.1 if you check out a new bash, or see bash.1 from line 8951)

If one uses Quantal Quetzal 12.10 or otherwise gets hold of (or checks out and builds) a new bash, then:

shopt -s direxpand

Gives me the behavior I want, need and love.

Workaround: In the meantime, CTRL-ALT-e instead of tab does what I want too. But is awkward.

BTW, There are several threads called bash tab variable expansion question? in gnu.bash.bug. From reading them, I found the info here.

share|improve this answer
a version of bash with direxpand is making its way into Precise (12.04): See – keturn Mar 31 '13 at 19:48
Would be even better if I didn't have my huge path expanded and could continue using an un-escaped variable with completion. – jozxyqk Aug 28 '14 at 6:17

search _filedir() in the top level bash_completion script and change the line

compopt -o filenames 2>/dev/null


compopt -o filenames -o noquote 2>/dev/null
share|improve this answer
In 12.04 GNU bash, version 4.2.25 this suggestion gives the error: compopt: noquote: invalid option name – arielf Nov 14 '15 at 0:28

For those (like me) with 12.04 can use ~+ instead of $PWD...

for example :

cd /bin
echo ~+/ls
share|improve this answer

Even with the updated bash, I was finding $ still gets escaped.

  • Removing the bash-completion (1:2.1-3.fc20) package
  • or simply not sourcing /etc/bashrc from ~/.bashrc seemed to fix it.

I suspect I'll now be missing some features I'm normally used to but haven't noticed any yet.

share|improve this answer

I encountered the same problem with Bash in Cygwin. I fixed my problem by setting the following option.

shopt -s cdable_vars

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.