星號作為 Unix 中的獨立指令有什麼作用?

星號作為 Unix 中的獨立指令有什麼作用?

我在 Red Hat Linux 的終端機上閒逛,當我輸入星號 ( *) 並按下回車鍵時,它執行了我目錄中的一個程式。為什麼?

我最好的猜測是 Unix 將其視為通配符,因此它執行了第一個字母程式。由於my_program.exeone_of_my_programs.program可以透過簡單地鍵入檔案名稱來執行,因此通配符運算子代表所有可能的檔案。由於程式首先按字母順序排列,因此 Unix 會執行它。這是正確的判斷嗎?

答案1

你的解釋是正確的。其餘文件將作為其參數清單顯示。

請注意,僅當程式設定了可執行位元並且當前目錄位於清單中時,它才會執行此操作PATH

一些可能有助於理解的註解:-

  • 如果您鍵入./*,則PATH不需要輸入該條目。
  • 如果您鍵入. *. ./*第一個符合的檔案是腳本,則它不需要是可執行的,也不需要目前目錄位於PATH(對於除 之外的 shell 可能不是這樣bash)。

答案2

這表示這.是您變數的一部分PATH。出於安全原因,這確實是一個糟糕的主意(當然,Windows 必須將其設定為不可修改的預設值)。

然而,這個「建議」只是稍微有效:如果您rm在當前目錄中有一個名為的文件,*那麼執行以下命令就可以了預設 rm:

/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$ 
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm  what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$ 

正如您所看到的,它不是rm在當前目錄(一個空且不可執行的文件)中執行的,而是在系統的預設/bin/rm.

當涉及通配符時,請務必仔細檢查您的命令。這是有史以​​來讀過的最可怕的消息之一:

rm: cannot remove '.o': No such file or directory

這是調用的結果

rm * .o

,或多或少是人們能想到的最糟糕的雜散空間佈局。

相關內容