我正在经历Unix的一些成长痛苦。我的问题:
我希望能够在shell中打印所有用户定义的变量。假设我在shell中执行以下操作:
$ x=9
$ y="Help"
$ z=-18
$ R="My 4th variable"
我将如何进行打印:
x y z R
答案 0 :(得分:3)
输入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
但打印$A
)
答案 1 :(得分:3)
您应该首先在运行时使用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
过滤它们。它也取决于shell。
添加:Grep和cut可能只是一个井:sed -n 's/^\([^[:space:]]\+\)=.*/\1/p'
答案 2 :(得分:0)
如果导出变量,则可以在Unix中使用env
命令。