Il modo più portatile è export -p
.
export -p
elenca le variabili esportate. Questo è di solito come declare -x
, se la vostra shell ha declare
.
Le shell in stile Bourne attualmente in uso dovrebbero supportare export -p
, come richiesto da POSIX :
Quando viene specificato -p , export deve scrivere nello standard output i nomi e i valori di tutte le variabili esportate, nel seguente formato:
"export %s=%s\n", <name>, <value>
se il nome è impostato e:
"export %s\n", <name>
se il nome non è impostato.
Lo standard prosegue spiegando che il valore della variabile viene visualizzato in modo tale che di solito ne consenta l'uso in un secondo momento sul lato destro di =
un compito. Questo per dire che può essere citato. Conchiglie diverse possono visualizzarle in modo diverso ma con lo stesso effetto. export -p
funziona anche con shell che non hanno declare
builtin, come 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
Ho eseguito il piping dell'output grep
per compattezza, ma se non lo filtri, otterrai l'elenco completo delle variabili esportate. Dalla tua domanda, sembra che sia quello che potresti trovare più utile.
Alcune shell, come Bash, utilizzano un formato non standard a meno che non venga esplicitamente indicato di comportarsi in modo conforme a POSIX. In Bash export -p
fornisce lo stesso output declare -x
di default.
$ 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 mostra un formato non standard anche quando è abilitata la compatibilità 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
In ogni caso, è possibile estrarre rappresentazioni portatili (che possono essere citate) cercando una parola seguita da =
. Questo non si basa sulle parole precedenti sulla riga, purché non precedano immediatamente =
, cosa che non dovrebbero. Per esempio:
% export -p | grep -oE '\w+=.*'
HOME=/home/ek
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
....
Nota che non tutte le voci hanno necessariamente =
. Questo perché le variabili possono essere non impostate ma esportate. Tali voci vengono filtrate dal grep
comando sopra, che può essere o meno quello che desideri.
Il più delle volte, si vuole solo controllare l'output e quindi non si cura se le voci sono preceduti da export
, declare -x
, typeset -x
, o qualcos'altro. Quindi corri e basta export -p
.
Ho testato quei comandi su Ubuntu 16.04 LTS con versioni ufficialmente impacchettate di ogni shell.