我正在尋找env
顯示所有環境變數。我碰巧發出了該命令set
,它似乎將腳本“cat”到控制台。為什麼會出現這種情況?
這參考頁似乎沒有解釋它。
If no options or arguments are supplied, set displays the names
and values of all shell variables
答案1
set
是 shell 內建指令。當您在命令列上發出該命令時,您會看到當前環境中的所有內容。這將包括您已加載的所有功能。請注意,大多數發行版將在 shell 設定檔中至少包含一些有用的功能,如果您安裝了 bash 完成功能,您將擁有大量這些功能。
env
是一個二進位檔案。它由 shell 載入並執行,就像任何其他命令一樣。因此,它只能看到您導出的任何環境變量,這應該排除 shell 環境中的任何函數。
答案2
正如 Frank Schrijver 在他的評論中所解釋的那樣,bash 內建函數set
將轉儲所有 shell 變數(僅在該運行時「存在」的變數)和所有shell 也有功能,函數再次初始化並存在於該特定 shell 進程中。
例如,您將看到類似的函數
_tilde ()
{
...
}
這是一個函數,其目的是~
為 bash 行編輯器提供字元上的製表符補全。
事實上,甚至set
可以透過運行命令查看bash 文檔
man bash | less '+/^\s*set \[--'
沒有提到它默認列印所有 shell 函數的事實,但正如您所發現的,以及其他人指出的 - 它也列印 shell 函數。