Apt-get * wildcard with ZSH

11,446

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-\*
Share:
11,446

Related videos on Youtube

mirandalol
Author by

mirandalol

Updated on September 18, 2022

Comments

  • mirandalol
    mirandalol over 1 year

    ZSH:

    sudo apt-get remove --purge ubuntuone-* 
    ERROR: zsh: no matches found: ubuntuone-*
    

    Works on Bash. What's the problem ? :-D

  • mirandalol
    mirandalol over 10 years
    Can I make zsh behave as Bash in that manner?
  • David Purdue
    David Purdue over 10 years
    I don't know, but the little bit of research I have done so far suggests no. In any case, it is always better (even in bash) to encase arguments in single quotes if you don't want the shell to expand wildcards, because even in bash the command won't do what you want if a file in the CWD matches the wildcard. e.g. I always type dpkg -l 'linux*' in bash to see all installed kernels.
  • neaumusic
    neaumusic over 7 years
    this works great
  • Stéphane Chazelas
    Stéphane Chazelas almost 6 years
    Or shopt -s failglob in bash to fix bash so it behaves like zsh and other modern shells like fish or tcsh that have fixed that misfeature of the Bourne shell whereby a command may still be run even if the globs didn't match.
  • Olexander Ivanitskyi
    Olexander Ivanitskyi over 5 years
    @StéphaneChazelas yoda