我正在经历一些与 Unix 相关的成长烦恼。我的问题:
我希望能够在我的 shell 中打印所有用户定义的变量。假设我在 shell 中执行以下操作:
$ x=9
$ y="Help"
$ z=-18
$ R="My 4th variable"
我将如何进行打印:
xyz
类型set
:
$ set
Apple_PubSub_Socket_Render=/tmp/launch-jiNTOC/Render
BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="3" [1]="2" [2]="51" [3]="1" [4]="release" [5]="x86_64-apple-darwin13")
BASH_VERSION='3.2.51(1)-release'
COCOS2DROOT=/Users/andy/Source/cocos2d
COLUMNS=80
DIRSTACK=()
...
(哦,顺便说一句,你分配的变量语法似乎不正确,比如说,A
但是 print $A
)
您应该首先在运行时使用 记录您的变量set
,然后再进行比较以查看添加了哪些变量。例子:
#!/bin/bash
set | grep -E '^[^[:space:]]+=' | cut -f 1 -d = | sort > /tmp/previous.txt
a=1234
b=1234
set | grep -E '^[^[:space:]]+=' | cut -f 1 -d = | sort > /tmp/now.txt
comm -13 /tmp/previous.txt /tmp/now.txt
输出:
a
b
PIPESTATUS
请注意,还有其他变量由 shell 生成,但用户未声明。您可以使用 过滤它们grep -v
。这也取决于外壳。
添加:Grep 和 cut 可能只是一个 sed 井:sed -n 's/^\([^[:space:]]\+\)=.*/\1/p'
如果变量被导出,那么您可以env
在 Unix 中使用命令。