Shell Unix用户创建的变量

Shell Unix用户创建的变量,shell,variables,unix,Shell,Variables,Unix,我正在经历Unix带来的一些成长烦恼。我的问题: 我希望能够在shell中打印所有用户定义的变量。假设我在shell中执行以下操作: $ x=9 $ y="Help" $ z=-18 $ R="My 4th variable" 我将如何进行打印: x y z R类型设置: $ set Apple_PubSub_Socket_Render=/tmp/launch-jiNTOC/Render BASH=/bin/bash BASH_ARGC=() BASH_ARGV=() BASH_LINENO=

我正在经历Unix带来的一些成长烦恼。我的问题:

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

$ x=9
$ y="Help"
$ z=-18
$ R="My 4th variable"
我将如何进行打印:

x y z R

类型
设置

$ 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

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

您应该首先在运行时用
记录变量,然后比较添加的变量。例如:

#!/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
过滤它们。这也取决于外壳


Add:Grep和cut可能只是一个sed a well:
sed-n的/^\([^[:space:]\+\)=./\1/p'

这里有很多:你只在读取变量值时添加美元符号,而不是在设置变量值时。是的。好电话@mnagel。我想我是想“模仿贝壳”。我的指导老师似乎在他的笔记中这样做了,它只是延续到我所写的内容中。如果
$
应该代表您的shell提示符(这是显示交互式命令时的常见惯例),请在它后面加一个空格。我将相应地编辑您的问题。仅当导出变量时。