9

Recently switched from bash, I noticed that zsh will try to expand every command or argument that looks like it has wildcards in it. So the following lines won't work any more:

git diff master{,^^}
zsh: no matches found: master^^

scp remote:~/*.txt .
zsh: no matches found: remote:~/*.txt

The only way to make the above commands work is to quote the arguments, which is quite annoying.

Q: How do I configure zsh to still try to expand wildcards, but if there are no matches, just pass on the argument as-is?

EDIT: Possibly related: scp with zsh : no matches found

2 Answers 2

8

It is an intended feature of zsh. when using any shell, it is considered best practice to quote any character that is considered a meta character to the shell. ^ is a pattern used to negate a string when the option extendedglob is set. * is a pattern used to match zero or more characters.

You can stop it by disabling the option nomatch. But by doing so, your unquoted patterns make your statements volatile, depending on what files may be present in the current working directory. You shouldn't do that.

1
  • Maybe I shouldn't, but it is quite tempting to do so. I used to think that I shouldn't have lots of aliases either. But in the end, all that matters is how long it takes for me to type in a command on my machine.
    – Attila O.
    Commented Nov 5, 2013 at 4:01
0

For scp, see https://superuser.com/a/431568

For git, use ~ instead of ^.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .