对 ls 命令中星号的行为感到困惑

对 ls 命令中星号的行为感到困惑

在 Centos 和 Debian 上我尝试过这个。

ls 命令中的 * 是否意味着递归搜索?

如果我开始输入目录名称并点击选项卡,我会看到以下内容:

# ls /etc/rc<tab>
rc0.d/    rc1.d/    rc2.d/    rc3.d/    rc4.d/    rc5.d/    rc6.d/    rc.local  rcS.d/

我想如果我在路径中添加一个星号,我会看到同样的东西,但它却进行了递归搜索:

# ls /etc/rc*
/etc/rc.local

/etc/rc0.d:
K50netconsole  K90network

/etc/rc1.d:
K50netconsole  K90network

/etc/rc2.d:
K50netconsole  S10network

/etc/rc3.d:
K50netconsole  S10network
...

windows dir 命令只会显示与 /etc/rc* 匹配的目录,如何从 ls 获得此行为(不使用 Tab 键)?

****编辑/更新:

好吧,现在我明白 * 是由 bash 而不是命令解释的,但它总是被解释为“枚举文件和文件夹条目”,或者如果我在不同的上下文中使用它,它会做其他事情吗?如果是的话,是否有一些大的东西? bash 中的 if 语句表示“if * 与文件系统路径一起使用,返回文件和文件夹名称,if * 与 rpm 一起使用(例如rpm -qa 帖子*) 返回包名称等”

答案1

星号在到达ls命令之前会展开,因此这相当于

ls /etc/rc0.d    /etc/rc1.d   /etc/rc2.d    /etc/rc3.d    /etc/rc4.d ...

它将分别列出每个目录的内容。

您可能想要使用ls -d /etc/rc*禁止列出目录内的文件,或使用仅显示扩展名的命令,例如echo /etc/rc*.

答案2

默认情况下,如果您ls使用目录参数调用,它将显示目录的内容。您可以使用该选项更改该行为-d。从man ls

-d, --directory
       list  directory entries instead of contents, and do not derefer‐
       ence symbolic links

相关内容