如何使 UNIX“set”指令僅列印環境變量

如何使 UNIX“set”指令僅列印環境變量

我習慣於 bashset命令僅列出環境設定列表,例如。路徑等。

然而,在我剛剛設定的 Ubuntu 系統上,執行set轉儲 2000 行文本,包括許多這樣的函數:

dequote () 
{ 
    eval printf %s "$1" 2> /dev/null
}

如何只列印環境變數?

答案1

預設set顯示外殼變數,不僅僅是環境變數。在bash函數中被視為變數的一部分。看https://askubuntu.com/questions/26318/environment-variable-vs-shell-variable-whats-the-difference

如果您使用envprintenv他們會顯示環境匯出到子進程,這不是一定與您的環境相同bash

$ foo=1
$ printenv foo
$ export foo
$ printenv foo
1

bashdeclaretypeset內建函數可以列出所有類型的變量,以省略函數:

declare -F

它們的輸出採用適合在 shell 腳本中重新建立狀態的形式,因此有點冗長,儘管您可以區分數組、整數和其他類型(取決於版本)。另請參見 的輸出export -p

並從https://stackoverflow.com/questions/1305237/how-to-list-variables-declared-in-script-in-bash 你可以告訴 bash 使用 POSIX 模式,並且set行為「正確」:

( set -o posix ; set ) 

它在子 shell 中運行,因此不會改變正在運行的 shell,並且它會正確拾取尚未導出到繼承環境中的變數。

答案2

如果您想列出所有環境變量,只需輸入env

相關內容