Bash

“區分大小寫是 Linux 文件系統而非 Linux 作業系統的功能”是什麼意思?

  • June 30, 2021

我剛剛讀到下面的句子:

區分大小寫是 Linux 文件系統而非 Linux 作業系統的功能。

我從這句話中得出的結論是,如果我在 Linux 機器上,但我正在使用使用 Windows 文件系統格式化的設備,那麼區分大小寫將不是問題。

我嘗試了以下方法來驗證這一點:

$ ~/Documents: mkdir Test temp

$ ~/Documents: touch Test/a.txt temp/b.txt

$ ~/Documents: ls te*
b.txt

它只列出了temp目錄中的文件,這是預期的,因為我在 Linux 文件系統中。

當我導航到 Windows 文件系統(注意:我使用的是 WSL2)時,我仍然得到相同的結果,但我希望它會列出兩個目錄中的文件,而忽略區分大小寫。

$ /mnt/d: mkdir Test temp

$ /mnt/d: touch Test/a.txt temp/b.txt

$ /mnt/d: ls te*
b.txt

我用 bash 和 zsh 都試過了。

我覺得它在某種程度上與 bash(或 zsh)有關,因為我還讀到 bash 強制區分大小寫,即使在使用不區分大小寫的文件系統時也是如此。

此測試適用於 Powershell,因此這意味著文件系統確實不區分大小寫。

在這裡,您正在執行:

ls te*

使用您的shell的一項稱為配或文件名生成(POSIX 中的路徑名擴展)的功能,而不是 Linux 系統或 Linux 上使用的任何文件系統的功能。

te*由 shell擴展為與該模式匹配的文件列表。

為此,shell 向系統請求目前目錄中的條目列表(通常使用readdir()C 庫的函式,該函式在下面將使用系統特定的系統呼叫(getdents()在 Linux 上)),然後將每個名稱與模式。

除非您已將 shell 配置為不區分大小寫(請參閱nocaseglobzsh 或 bash 中的選項)或使用 glob 運算符來切換不區分大小寫(如 中的(#i)擴展 glob 運算符zsh),te*否則只會擴展到名稱為的文件列表以readdir()開頭報告te,即使系統或下面的文件系統上的路徑名解析不區分大小寫或可以像 NTFS 一樣。

引用自:https://unix.stackexchange.com/questions/656005