Filenames
使用以句點結尾的文件名
為什麼 Unix 允許文件名末尾有句點?這有什麼用嗎?
例如:
filename.
我問是因為我有一個簡單的函式來呼應文件的副檔名。
ext() { echo ${1##*.} }
但是如果文件名以 a 結尾,它不會列印任何內容
.
,我想知道這樣寫是否更可靠:ext() { extension=${1##*.} if [ -z "$extension" ]; then echo "$1" else echo "$extension" fi }
顯然,這取決於您要完成的工作,但是如果
.
不允許文件名末尾的 a,那麼我一開始就不會想知道任何事情。
Unix 文件名只是字節序列
/
,並且可以包含除NUL
任何位置之外的任何字節。沒有像 Windows 及其文件系統中那樣內置的“擴展”概念,因此沒有理由不允許文件名以通常可以出現在其中的任何字元結尾(或開始)——a.
不再特別比一個x
.為什麼 Unix 允許文件名末尾有句點?“字節序列”是一個簡單且非排他性的名稱定義,當沒有動機的理由來計算某些東西時,沒有。制定和應用規則來排除特定的東西是更多的工作。
它有什麼用嗎?如果你想創建一個具有該名稱的文件,當然可以。以 結尾的文件名有用
x
嗎?我不能說我通常會.
在最後創建一個帶有 a 的文件名,但兩者.
和都是需要普遍支持的可移植文件名字元集x
的明確一部分,並且兩者都不是特別的,所以如果我有一個使用它(也許用於機械生成的編碼)然後我可以,我可以依靠它工作。同樣,引用目前目錄和父目錄的特殊文件名
.
(dot) 和(dot-dot) 是 POSIX規定的,並且都以. 任何處理文件名的程式碼通常都需要解決這些問題。..``.