Bei der Bourne-Shell-Familie haben alle Shell-Variablen Großbuchstaben. Das heißt, Sie können nicht erkennen, ob eine bestimmte Variable eine Umgebungsvariable ist oder nicht, indem Sie nur ihren Namen betrachten. Wie bestimmen Sie, welche Bourne-Shell-Variablen lokal sind (nur innerhalb der aktuellen Shell definiert)?
12
Antworten:
Wenn Sie sehen möchten, ob eine Variable exportiert wird oder nicht, verwenden Sie
declare
:quelle
Der tragbarste Weg ist
export -p
.export -p
listet exportierte Variablen auf. Dies ist normalerweise sodeclare -x
, wenn Ihre Shell hatdeclare
.Derzeit verwendete Bourne-Shells sollten unterstützen
export -p
, wie es von POSIX gefordert wird :Der Standard erklärt weiter, dass der Wert der Variablen so angezeigt wird, dass sie normalerweise später auf der rechten Seite
=
einer Zuweisung verwendet werden kann. Dies bedeutet, dass es zitiert werden kann. Verschiedene Muscheln können sie unterschiedlich anzeigen, aber mit dem gleichen Effekt.export -p
funktioniert auch in Shells, die nichtdeclare
eingebaut sind, wie Dash .Ich habe die Ausgabe aus Gründen der
grep
Kompaktheit weitergeleitet, aber wenn Sie sie nicht filtern, erhalten Sie die vollständige Liste Ihrer exportierten Variablen. Aus Ihrer Frage geht hervor, dass Sie dies möglicherweise am nützlichsten finden.Einige Shells, wie z. B. Bash, verwenden ein nicht standardmäßiges Format, sofern nicht ausdrücklich angewiesen wird, sich POSIX-konform zu verhalten. In Bash
export -p
gibt es die gleiche Ausgabe wiedeclare -x
standardmäßig.Zsh zeigt ein nicht standardmäßiges Format, auch wenn die POSIX-Kompatibilität aktiviert ist:
In jedem Fall können Sie tragbare Darstellungen (die möglicherweise zitiert werden) extrahieren, indem Sie nach einem Wort suchen, gefolgt von
=
. Dies hängt nicht von vorherigen Wörtern in der Zeile ab, solange sie nicht unmittelbar vorangehen=
, was sie nicht sollten. Beispielsweise:Beachten Sie, dass nicht alle Einträge unbedingt haben
=
. Dies liegt daran, dass Variablen nicht gesetzt, sondern exportiert werden können. Diese Einträge werden durch dengrep
obigen Befehl herausgefiltert, der möglicherweise Ihren Wünschen entspricht oder nicht.Die meiste Zeit, wollen Sie nur die Ausgabe kontrollieren und so werden Sie es egal , ob die Einträge durch vorausgeht
export
,declare -x
,typeset -x
, oder etwas anderes. Dann renn einfachexport -p
.Ich habe diese Befehle unter Ubuntu 16.04 LTS mit offiziell verpackten Versionen jeder Shell getestet .
quelle
Variablen, die NICHT exportiert werden, können aus der Ausgabe des
declare
Befehls in bash gesehen werden.Variablen , die werden exportiert wird, kann vom Ausgang der zu sehen
declare -x
oderexport
Befehl in bash.quelle