2013-09-14 4 views
2

Я собираюсь, хотя некоторые растущие боли с Unix. Мой вопрос:Пользовательские переменные, созданные пользователем Unix

Я хочу, чтобы иметь возможность печатать все мои пользовательские переменные в моей оболочке. Пусть говорят, я делаю следующее в оболочке:

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

Как бы идти о печати:

хуг R

+0

Много в здесь: http://stackoverflow.com/questions/15262292/whats-the-difference-of-the-command -output-after-input-the-command-env – dcaswell

+0

вы добавляете знак доллара только при чтении значения переменной, а не при его настройке. – mnagel

+0

Да. Хороший звонок @mnagel. Я пытался «подражать оболочке», я полагаю. Мой преподаватель, похоже, делает это в своих заметках, и это просто переносится на то, что я написал. –

ответ

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 

Обратите внимание, что все еще существуют другие переменные, полученные оболочки, но не объявляется пользователем. Вы можете отфильтровать их с помощью grep -v. Это зависит от оболочки.

Добавить: Grep и вырезать может просто быть только один СЭД хорошо: sed -n 's/^\([^[:space:]]\+\)=.*/\1/p'

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)

0

Если переменные экспортируются, вы можете использовать команду env в Unix.

+0

, только если экспортируются переменные. –

+0

@glennjackman: Спасибо, я отредактировал свой ответ. – anubhava

Смежные вопросы