Filenames

使用以句點結尾的文件名

  • March 9, 2015

為什麼 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規定的,並且都以. 任何處理文件名的程式碼通常都需要解決這些問題。..``.

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