Bash
- 在目錄路徑的末尾
*
我對bash 腳本中目錄路徑末尾的字元有疑問。我有一個腳本,一旦它們足夠老,它應該會自動從伺服器中刪除一些檔案。該腳本在機器 A 上,我需要在機器 B 上執行它。我通過遠端訪問兩台機器
ssh
(沒有 sudo,只是普通使用者)。該腳本的規則之一是它只需要刪除以 . 開頭的文件夾中的檔案dirA/dirB/dirC/dirD/dirE*
。但是,那個位置沒有
dirE
,所以我猜是*
一些變數的代表。這就是我想知道的,*
目錄路徑末尾的含義是什麼,它使腳本做什麼?
這裡
*
是一個“globbing character”,意思是“匹配 0 個或多個字元”。為了說明,考慮這個目錄:$ ls dirA dire dirE dirEa dirEEE $ echo dirE* dirE dirEa dirEEE
正如您在上面看到的,glob匹配
dirE*
,dirE
但不匹配or (*nix 系統區分大小寫)。dirEa``dirEEE``dirA``dire
因此,在您的腳本中,這意味著它將從
dirA/dirB/dirC/dirD/
名稱以dirE
.
我將在這里為那些出於另一個原因參加此問答的人添加一個註釋。
如果您在(實際上是 of ,但有時別名為(或內置的) 或 of或完成
*
的輸出中的文件名末尾看到 a ,那是完全不同的東西。ls``ls -F``ls``ls -F``ls-F``tcsh``zsh``tcsh
使用該
-F
選項,在某些特殊ls
文件名的末尾添加一個尾隨字元,以幫助辨識它們的特殊性。並在列出文件名完成時執行相同的操作。zsh``tcsh
如果你看到:
$ ls -F dir/ fifo| file link@ ls* socket=
那些
/
,|
和不是文件名的一部分(儘管如果有人試圖欺騙你,它們可能是),但附加 是*
為了告訴你:=``ls
dir
是一個目錄 (/
)fifo
是一個命名管道/fifo (|
)link
是符號連結 (@
)ls
是一個可執行的正常文件(*
)(在其權限中至少有一個執行位)socket
是一個 Unix 域套接字 (=
)一些
ls
實現(和zsh
’ 的完成)也可以通過顏色為終端進行區分,這些終端支持不同的選項。