对“树”找不到文件感到困惑

Ale*_*oca 1 linux tree

为什么最后一棵树没有找到fstab

tree /etc -P fstab --prune
/etc
??? fstab    
0 directories, 1 file
Run Code Online (Sandbox Code Playgroud)

.

tree /etc -P fsta* --prune
/etc
??? fstab
0 directories, 1 file    
Run Code Online (Sandbox Code Playgroud)

.

tree /etc -P *stab --prune
/etc
??? fstab    
0 directories, 1 file
Run Code Online (Sandbox Code Playgroud)

这里发生了什么? 根据我的理解,它至少应该找到 fstab

tree /etc -P *sta* --prune   
/etc
0 directories, 0 files
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 5

当您在命令行上使用不带引号的通配符模式时,shell 将尝试将其与文件名进行匹配。如果没有文件名匹配的模式,大部分炮弹将保持未扩展模式(zsh默认会抱怨,因为会bashset -u)。

您显然有一些名称匹配的文件*sta*,但不匹配fsta*or *stab。外壳扩展*sta*该文件的名称,这意味着该模式不再匹配fstab/etc

解决方案是在模式周围使用单引号或双引号(并tree在内部进行自己的模式匹配)。