Apt-get * wildcard with ZSH

Solution 1:

Yes, zsh and bash behave differently in this regard.

In zsh, when you say "ubuntuone-*" it looks in your current working directory for files that start with ubuntuone- - since it does not find any, it says "no matches" and does not run the command.

bash takes a different tack - it also looks for files that start with ubuntuone- in the current working directory, but if it does not find any it says to itself, "Maybe the program I am invoking knows how to handle the wildcard," and so passes "ubuntuone-*" off to sudo apt-get as a literal argument.

If you had a file in your current working directory called ubuntuone-ffdjhjer, then bash would try to execute sudo apt-get remove --purge ubuntuone-ffdjhjer, which would probably fail.

In zsh (and in bash) you can use single quotes to tell it not to expand the wildcard but to pass it on, as in:

sudo apt-get remove --purge 'ubuntuone-*'

Solution 2:

Might be a little late this answer, but there is a way to fix this. From command line execute:

unsetopt no_match

Solution 3:

There are another way to prevent expansion in zsh, which i prefer over quotes:

sudo apt-get remove --purge ubuntuone-\*