Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why zsh tries to expand * and bash does not?

I just encountered the following error with zsh when trying to use logcat.
Namely, when typing:

adb logcat *:D 

I get the following error in zsh

zsh: no matches found: *:D

I have to escape the * like :

adb logcat \*:D 

While using bash, I do not get the following error.
Why would it be like this?

like image 797
Patryk Avatar asked Nov 17 '13 23:11

Patryk


1 Answers

zsh warns you by default if you use a glob with no matches. Bash, on the other hand, passes the unexpanded glob to the app, which is a potential problem if you don't know for certain what will match (or if you make a mistake). You can tell zsh to pass the unevaluated argument like bash with setopt nonomatch:

   NOMATCH (+3) <C> <Z>
          If a pattern for filename generation has no  matches,  print  an
          error,  instead  of  leaving  it unchanged in the argument list.
          This also applies to file expansion of an initial `~' or `='.

Or drop the argument instead with setopt NULL_GLOB:

   NULL_GLOB (-G)
          If a pattern for filename generation has no matches, delete  the
          pattern  from  the  argument list instead of reporting an error.
          Overrides NOMATCH.

Bash actually has the same option (setopt nullglob), and can emulate zsh with setopt failglob

like image 75
Kevin Avatar answered Sep 19 '22 09:09

Kevin