對 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 而不是命令解釋的,但它總是被解釋為“枚舉文件和文件夾條目”,或者如果我在不同的上下文中使用它,它會做其他事情嗎?轉 -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

相關內容