Variable

如何列印所有非環境變數?

  • December 3, 2017

如何列印所有非環境變數?

這些是我在 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)$'

這會生成目前 shellset中所有變數名的列表(diff帶最後一次剪切和第一個 grep),並修剪掉子程序沒有的一些特定於 Bash 的預設變數,因為它不是面向使用者的 shell。set -o posixset列出變數而不列出函式。

它將忽略繼承環境變數和您明確標記為導出的變數。

bash你的殼。您還需要更改最後一個被忽略的變數列表grep,並且可能會失去set -o posix。如果您的 shell 沒有程序替換,您將需要使用臨時文件,或者使用特定於平台的文件描述符訪問(如/dev/fd)。


另一方面,如果您只想清除自己的局部變數和函式,那麼

exec bash

會產生這種效果(同時還會重新讀取一些配置文件並可能失去對 shell 選項的本地更改)。

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