Вы должны записать свои переменные сначала во время выполнения с помощью 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'
Много в здесь: http://stackoverflow.com/questions/15262292/whats-the-difference-of-the-command -output-after-input-the-command-env – dcaswell
вы добавляете знак доллара только при чтении значения переменной, а не при его настройке. – mnagel
Да. Хороший звонок @mnagel. Я пытался «подражать оболочке», я полагаю. Мой преподаватель, похоже, делает это в своих заметках, и это просто переносится на то, что я написал. –