Найбільш портативний спосіб export -p.
export -pсписки експортованих змінних. Зазвичай це подобається declare -x, якщо ваша оболонка є declare.
Раковини в стилі Борна, які зараз використовуються, повинні підтримувати export -p, як це вимагає POSIX :
Коли -p задано, експорт записує на стандартний вихід імена та значення всіх експортованих змінних у такому форматі:
"export %s=%s\n", <name>, <value>
якщо ім'я встановлено, і:
"export %s\n", <name>
якщо ім’я не встановлено
Стандарт продовжує пояснювати, що значення змінної відображається таким чином, що зазвичай дозволяє використовувати її пізніше праворуч =у призначенні. Це означає, що це може бути цитувано. Різні оболонки можуть відображати їх по-різному, але з однаковим ефектом. export -pпрацює навіть в оболонках, які не мають declareвбудованого, як Dash .
$ dash -c 'export -p | grep HOME=' # busybox sh and other ash give the same output.
export HOME='/home/ek'
$ posh -c 'export -p | grep HOME=' # ksh93, mksh, lksh, and others give the same output.
export HOME=/home/ek
Я переклав вихід на grepкомпактність, але якщо ви не фільтруєте його, ви отримуєте повний список експортованих змінних. З вашого запитання звучить так, що саме вам може бути корисним.
Деякі оболонки, як, наприклад, Bash, використовують нестандартний формат, якщо явно не доручено поводитись на POSIX-сумісний спосіб. У Bash export -pвидається такий же вихід, що і declare -xза замовчуванням.
$ bash -c 'export -p | grep HOME='
declare -x HOME="/home/ek"
$ bash -c 'POSIXLY_CORRECT= export -p | grep HOME='
export HOME="/home/ek"
$ bash -c 'set -o posix; export -p | grep HOME='
export HOME="/home/ek"
$ bash --posix -c 'export -p | grep HOME='
export HOME="/home/ek"
$ ln -s /bin/bash sh
$ ./sh -c 'export -p | grep HOME=' # Invoking bash as sh also puts it in POSIX mode.
export HOME="/home/ek"
Zsh показує нестандартний формат, навіть коли сумісність POSIX включена:
$ zsh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
$ zsh -c 'emulate -R sh; export -p | grep HOME='
typeset -x HOME=/home/ek
$ ln -s /bin/zsh sh
$ ./sh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
У будь-якому випадку, ви можете витягнути портативні подання (які можуть бути цитовані), шукаючи слово, за яким слід =. Це не покладається на попередні слова в рядку, доки вони не одразу передують =, чого не повинні. Наприклад:
% export -p | grep -oE '\w+=.*'
HOME=/home/ek
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
....
Зауважте, що не всі записи обов'язково є =. Це тому, що змінні можуть бути зняті, але експортовані. Ці записи відфільтровані grepкомандою вище, яка може бути, а може бути і не такою, яку ви хочете.
Велика частина часу, ви просто хочете , щоб перевірити продуктивність і тому ви не будете піклуватися , якщо запис передують export, declare -x, typeset -xабо що - то інше. Тоді просто біжи export -p.
Я протестував ці команди на Ubuntu 16.04 LTS з офіційно упакованими версіями кожної оболонки.