'echo [AZ]*' 也符合小寫檔名嗎?

'echo [AZ]*' 也符合小寫檔名嗎?

我正在處理根目錄,並希望列印以大寫字母開頭的目錄條目。

$ echo [A-Z]*
Applications Library Network System Users Volumes bin cores dev etc home installer.failurerequests net private sbin tmp usr var vm

結果讓我感到困惑,因為我沒想到 cores dev etc home installer.failurerequests net private sbin tmp usr var vm會符合我的模式。

如何編寫僅匹配大寫字母的全域模式?

答案1

這是因為 glob 模式[A-Z]通常不對應於大寫字母。具體來說,它是根據

當前語言環境的整理順序和字元集

如果您想要以大寫字母開頭的文件,您可以使用

echo [[:upper:]]*

或明確設定區域設置

(LC_COLLATE=C; echo [A-Z]*)

或使用 bash globasciirangesshell 選項

(shopt -s globasciiranges; echo [A-Z]*)

請參閱以下Pattern matching部分man bash

相關內容