符號 . 叫什麼?
的名字是什麼
*.*
符號及其意義是什麼?
*.*
舊Windows/DOS系統下的解讀這裡的意義更多的是與 Windows/DOS 相關,而不是與 Unix/Linux 相關。在舊的 Windows/DOS 系統上,它是一個“萬用字元”模式。萬用字元模式用於以與 Unix glob 類似的方式匹配文件名。萬用字元通常
*.*
用於匹配任何文件。與 Unix glob 一樣,
*
它將匹配文件名中的任何字元序列,因此*
它自己也將匹配任何文件。然而,之所以*.*
會匹配任何文件名,是因為這些萬用字元的工作方式不同。根據這篇文章:星號之後的除點以外的任何字元都無效,因為星號將游標移動到位置 12,此時除了點之外沒有任何內容會改變解析狀態,點會清除最後三個位置並移動游標。
這種行為(從 Unix 的角度來看有點奇怪)意味著 a 後面的點
*
實際上並不匹配點,而只是一種允許您向模式添加更多字元的 hackish 方式。這意味著添加另一個*
將匹配最後三個位置的任何內容。當您考慮到該語法用於 DOS 和在 Windows 95 之前需要8.3 文件名的舊 Windows 系統時,這更有意義。這些文件名只允許有一個點,點後面最多三個字元。大多數(如果不是系統上的所有文件)都具有三個字元的副檔名(即使在技術上允許更短或不允許副檔名),所以不知何故我認為使用
*.*
匹配任何文件是有意義的(至少從扭曲的 Windowsey 邏輯角度來看) )。
*.*
在 Unix shell 中的解釋正如其他人指出的那樣,在 Unix shell 中,這表示“路徑名擴展”或“glob”。
*
沒有任何奇怪的跳轉到結尾的行為,因此不會導致後面的字元被忽略。*.*
模式將匹配任何包含點的文件名(開頭除外)。這絕對不會匹配任何文件,因為 Unix/Linux 系統上有許多文件沒有副檔名(或者包含點,因為這也是允許的)。在 Unix 上不匹配文件名開頭的點的原因
*.*
是因為在開頭放置一個點是文件“隱藏”的方式,並且預設情況下隱藏文件從 glob 中排除。要在 POSIX shell 中匹配它們,需要在模式的開頭顯式放置一個點。在shell選項bash
中dotglob
可以設置或者GLOBIGNORE
變數可以適當設置,但這是另一個問題!