Unix用户创建了变量

时间:2013-09-14 16:23:10

标签: shell variables unix

我正在经历Unix的一些成长痛苦。我的问题:

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

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

我将如何进行打印:

x y z R

3 个答案:

答案 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命令。