2

我正在经历一些与 Unix 相关的成长烦恼。我的问题:

我希望能够在我的 shell 中打印所有用户定义的变量。假设我在 shell 中执行以下操作:

$ x=9
$ y="Help"
$ z=-18
$ R="My 4th variable"

我将如何进行打印:

xyz

4

3 回答 3

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但是 print $A

于 2013-09-14T16:25:02.887 回答
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。这也取决于外壳。

添加:Grep 和 cut 可能只是一个 sed 井:sed -n 's/^\([^[:space:]]\+\)=.*/\1/p'

于 2013-09-14T16:42:23.313 回答
0

如果变量被导出,那么您可以env在 Unix 中使用命令。

于 2013-09-14T16:25:39.957 回答