
當您在終端“vim 檔案名稱”上寫入時,我知道 vim 接收檔案名稱作為參數,但我猜想程式也接收 vim 作為參數......它只是終端模擬器還是另一個程式?
答案1
當您vim filename
在命令列上鍵入時,shell 已經啟動,因此 shell(和終端機模擬器)不會vim
作為命令列參數。
vim
,另一方面,可以,但這對使用者不可用。當一個程式啟動時,它的名字是通常作為第零個命令列參數給出。您可以透過啟動 shell 並 echo 來看到這一點$0
:
$ sh
$ echo $0
sh
$ exit
shell 使用execve()
(或類似的exec()
函數)在命令列上執行命令,其POSIX規範說
中的值
argv[0]
應指向與函數之一啟動的進程關聯的檔案名稱字串exec
。
argv[0]
上面的文字對應於$0
shell 腳本。
基本原理部分繼續說:
對嚴格符合 POSIX 應用程式的要求也指出:作為第一個參數傳遞的值是與正在啟動的進程關聯的檔案名稱字串。儘管某些現有應用程式在某些情況下傳遞路徑名而不是檔案名稱字串,但檔案名稱字串更普遍有用,因為 的常見用法
argv[0]
是在列印診斷中。在某些情況下,傳遞的檔案名稱不是檔案的實際檔案名稱;例如,登入實用程式的許多實作都使用在實際檔案名稱前添加前綴<hyphen-minus>
(-
) 的約定,這會向呼叫的命令解釋器表明它是「登入 shell」。