Bash
為什麼這個 find 命令不返回僅包含非 ASCII 字元的文件名?
find
我正在嘗試確定此命令不起作用的根本原因;它不應該與下面呼叫的文件匹配this_should_not_match
:$ > find . -type f -name "*[^ -~]*" ./__º╚t ./this_should_not_match ./__╞_u ./__¡VW ./__▀√Z ./__εè_ ./__∙Σ_ ./__Σ_9 ./__Σhm ./__φY_
我的外殼是 Bash 3.2
範圍僅在 C 語言環境中可靠且可移植地工作。在其他語言環境中,您會得到一些變化,但通常
[x-y]
會得到字元(實際上是整理元素,它甚至可以匹配字元序列),這些字元以某種排序順序x
在前後y
排序,這通常是模糊的,並且並不總是與sort
使用的相同。在 C 語言環境中(請參閱“LC_ALL=C”做什麼?),字元是字節,範圍基於字元的程式碼點(基於字節值)。
LC_ALL=C find . -type f -name "*[^ -~]*"
在基於 ASCII 的系統上(大多數;POSIX 不保證 C 語言環境使用 ASCII 字元集,但實際上,除非您使用一些基於 EBCDIC 的特殊 IBM 大型機作業系統(但隨後您會知道) , 您將使用 ASCII) 將列出名稱中包含 32 到 126 以外的字節的正常文件。
另請注意,在多字節字元語言環境中(如 UTF-8 語言環境,現在的規範),它
*
甚至可能不匹配某些系統上的所有文件名,它將無法匹配不形成有效字元的字節序列.