当我注意到“grep”命令的这种奇怪的异常行为时,我正在学习 Linux 命令。在
/usr/bin
目录中,当我运行时:
me@me-desktop:/usr/bin$ ls -l | grep bashb*
-rwxr-xr-x 1 root root 6988 Mar 31 2024 bashbug
这是预期的,但如果我在外面做同样的事情
/usr/bin
me@me-desktop:~/Code/linux$ ls -l /usr/bin | grep bashb*
-rwxr-xr-x 1 root root 1446024 Mar 31 2024 bash
-rwxr-xr-x 1 root root 6988 Mar 31 2024 bashbug
-rwxr-xr-x 1 root root 4527 Apr 17 2023 dh_bash-completion
lrwxrwxrwx 1 root root 4 Aug 20 23:14 rbash -> bash
如您所见,它现在可以选择忽略
b
中的最后一个 bashb
。
在许多其他情况下也会发生这种情况。例如如果您这样做
apt list | grep lib*
,那么它也会列出带有 li
的内容。
bashb*
在 ls -l | grep bashb*
中进行通配并匹配文件 bashbug
。您的 grep
实际上变成了
ls -l | grep bashbug
当您的当前目录不包含匹配文件时,
bashb*
按原样使用,这也是错误的,因为它会匹配名称中任何位置带有bash
的任何文件,后跟0个或多个b
的。