Environment-Variables

為什麼在echo之前呼叫env目錄?

  • May 12, 2017

我正在查看一個用 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可以做的事情,並且除了古董之外是便攜的。

使用範常式式碼中傳遞的參數,回顯實現的選擇無關緊要。如果說這種瘋狂是有道理的,那就需要更多的背景才能弄清楚。

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