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-\*