Environment-Variables
為什麼在echo之前呼叫env目錄?
我正在查看一個用 C 編碼的程序。這個程序的問題取決於這行程式碼。
system("/usr/bin/env echo and now what?");
我知道 system() 只是執行命令。但我只是不確定為什麼會這樣。
通常它只是“迴聲,現在是什麼”。但是為什麼把“usr/bin/env”放在它前面呢?那究竟是在做什麼?
/usr/bin/env
後跟程序的名稱執行該程序。PATH
它在環境變數配置的目錄中將程序名稱作為執行檔查找。env
這是使用:的特殊情況,env
後跟一些環境變數賦值,然後是程序名稱和參數——這裡恰好是零變數賦值。
/usr/bin/env echo …
等價於/bin/echo …
,除了它沒有硬編碼路徑echo
- 取決於系統和 的值PATH
,它可能是/bin/echo
,/usr/bin/echo
,/usr/xpg4/echo
,/usr/ucb/echo
,/usr/local/bin/echo
,/home/bob/bin/echo
, …幾乎每個 shell 都有一個
echo
內置命令。shell 內置命令和外部命令之間的行為可能有所不同。在實踐中,命令之間在兩個方面存在差異echo
:如果第一個參數以-
(某些版本的echo
處理幾個選項)開頭會發生什麼,以及如何處理反斜杠(某些版本按字面意思列印,其他版本將其視為轉義字元)。因此,當您想要使用這些依賴於實現的行為時,強制一個版本echo
有時很有用。在大多數情況下,最好改用它printf
——printf
可以做所有echo
可以做的事情,並且除了古董之外是便攜的。使用範常式式碼中傳遞的參數,回顯實現的選擇無關緊要。如果說這種瘋狂是有道理的,那就需要更多的背景才能弄清楚。