关于 grep 命令的一点菜鸟疑惑

我的某文件夹下有两个游戏:水仙 3 Die Dritte Welt.7z 水仙.7z
1.ls 命令用 grep 查找会正常显示的情况:
ll |grep 水仙 或 ll |grep 水仙 -
-rw-r–r-- 1 test users 817157484 9 月 28 20:43 水仙 3 Die Dritte Welt.7z
-rw-r–r-- 1 test users 268179835 9 月 28 20:42 水仙.7z

2.查找到了但有莫名其妙提示而且还不显示权限大小时间等信息的情况:
ll |grep - 水仙 *(星号与汉字之间无空格)
匹配到二进制文件 水仙 3 Die Dritte Welt.7z
匹配到二进制文件 水仙.7z

这里不应该是把该目录下所有文件都显示出来吗 (ls 用了-l 选项,而我设定的关键字就是-,任何文件都有权限所以…而后面的水仙 * 应该是让 grep 去叫水仙 * 的文件中去查找关键字的意思啊?),为啥会只显示出这俩水仙而且也没匹配关键字?

3.只找到了一个的情况???
ll |grep 水仙 * -(* 号与汉字之间无空格)
(标准输入):-rw-r–r-- 1 test users 817157484 9 月 28 20:43 水仙 3 Die Dritte Welt.7z

4.找遍该文件下的所有文件却没发现除了目录以外的文件?(只有 xxx 是一个目录的提示,大概与 2 是一样的原因)
ll |grep 水仙 *(星号与汉字之间有空格)
grep: vlc 视频播放器: 是一个目录

通配符不是已经让 grep 搜索了该目录下所有文件吗,应该是包含这两个文件的鸭,为啥只能搜到目录?

希望有大佬能告诉我第 2-4 种情况是啥原因导致的…

你该好好去学一下 bash。你的 * 没有使用引号或者转义,因此 bash 给你把 水仙 * 扩展成了「水仙」开头的文件名。grep 的第一个参数是要查找的正则,后边是要在哪些文件里查看。

PS: 这论坛什么破设置,用了代码样式还给我添加莫名其妙的空格??

感谢大佬回复,其实我也觉得发这篇挺不好意思的,都是我应该自己去了解的基础,我就是感觉等学完之后可能都会忘了这些问题了,想先发上来问问咋回事,我还是先去补基础吧。。。

grep 加了星号后不知为何不显示文件名了 - 命令行 - openSUSE 中文论坛

看着问题跟以前一样啊

grep 的参数要加单引号,防止 shell 先解析特殊字符。
因为 grep 的参数使用正则表达式,与 shell 使用的通配符是不一样的。
你要查找所有包含水仙的文件名,可以使用如下命令:
ll | grep '水仙.*'