The difference between those two commands is the quoted `*` character. If you call a command in a shell and use the `*` character for an argument, the shell itself will evaluate the argument. See this example: $ ls file1.zip file2.zip file3.zip file4.txt Now with a `*`: $ ls *.zip file1.zip file2.zip file3.zip The shell evaluates the wildcard and builds a command as follows: $ ls file1.zip file2.zip file3.zip With a quoted wildcard, it is interpreted as a file named (literally) `*.zip`: $ ls "*".zip ls: cannot access *.zip: No such file or directory ---- The `unzip` utility cannot be called with multiple zipped files as arguments. But, the developer chose another way for this. From the manpage: > file[.zip] > > [...] Wildcard expressions are similar to > those supported in commonly used Unix shells (sh, ksh, csh) [...] > (**Be sure to quote any character that might otherwise be interpreted or > modified by the operating system**, particularly under Unix and VMS.)