Bash

  • 在目錄路徑的末尾

  • January 13, 2019

*我對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’ 的完成)也可以通過顏色為終端進行區分,這些終端支持不同的選項。

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