Variable
如何列印所有非環境變數?
如何列印所有非環境變數?
這些是我在 shell 啟動時添加的所有變數,例如:
read abc 123 # echo ${abc} => 123
或者
xyz='123' # echo ${xyz} => 123
我想把它們全部列印出來,想知道記憶體中添加了什麼,這樣我就可以把它清理掉。
如果您使用 Bash,此命令將列出所有未由子程序繼承且不屬於預設設置的 shell 變數的名稱:
diff -U 1 <(set -o posix ; set |cut -d= -f1) <(exec bash -ic 'set -o posix ; set' | cut -d= -f1)|grep '^[-][^-]'|cut -d- -f2|grep -vE '^(COLUMNS|HISTFILESIZE|HISTSIZE|LINES|PIPESTATUS)$'
這會生成目前 shell
set
中所有變數名的列表(diff
帶最後一次剪切和第一個 grep),並修剪掉子程序沒有的一些特定於 Bash 的預設變數,因為它不是面向使用者的 shell。set -o posix
只set
列出變數而不列出函式。它將忽略繼承的環境變數和您明確標記為導出的變數。
換
bash
你的殼。您還需要更改最後一個被忽略的變數列表grep
,並且可能會失去set -o posix
。如果您的 shell 沒有程序替換,您將需要使用臨時文件,或者使用特定於平台的文件描述符訪問(如/dev/fd
)。另一方面,如果您只想清除自己的局部變數和函式,那麼
exec bash
會產生這種效果(同時還會重新讀取一些配置文件並可能失去對 shell 選項的本地更改)。