Ich schreibe ein Shell-Skript, wo ich prüfen muss, ob Umgebungsvariable gesetzt ist, wenn nicht gesetzt, dann muss ich es einstellen. Gibt es eine Möglichkeit, im Shell-Skript nachzusehen, ob eine Umgebungsvariable bereits gesetzt ist oder nicht?überprüfen, ob Umgebungsvariable bereits gesetzt ist
Antwort
[ -z "$VARIABLE" ] && VARIABLE="abc"
if env | grep -q ^VARIABLE=
then
echo env variable is already exported
else
echo env variable was not exported, but now it is
export VARIABLE
fi
Ich möchte betonen, dass [ -z $VARIABLE ]
nicht genug ist, weil Sie VARIABLE
haben können, aber es wurde nicht exportiert. Das bedeutet, dass es sich überhaupt nicht um eine Umgebungsvariable handelt.
Funktioniert das in allen Shell-Umgebungen? – Mojoy
@Senthilnathan: Ja, natürlich, das einzige Ding, das neu geschrieben werden könnte, um diesen peacof Code portabler zu machen, ist 'grep -q'. Man könnte "env" schreiben grep^VARIABLE =>/dev/null' stattdessen. –
Wenn ich eine Variable exportiere, dann setze ich die Variable auf etwas anderes, ohne sie zu exportieren, kommt es zu einer Nichtübereinstimmung zwischen meiner nicht exportierten Variablen und meiner exportierten Variablen, oder wird sie automatisch auch die exportierte Variable aktualisieren? – ArtOfWarfare
if [ -z "$VARIABLE" ]; then
VARIABLE=...
fi
Dies überprüft, ob die Länge von $ VARIABLE gleich Null ist.
Was Sie tun möchten, ist heimisch in bash, sie genannt wird Parameter Substitution:
VARIABLE="${VARIABLE:=abc}"
Wenn die Variable nicht gesetzt ist, der rechten Seite wird auf abc gleich sein. Beachten Sie, dass der interne Operator: = ersetzt werden kann durch: - was testet, wenn VARIABLE nicht gesetzt oder leer ist.
Genau das, was ich gesucht habe. Die Zeile 'export TEST_DATABASE_NAME =" $ {TEST_DATABASE_NAME: = prodlike} "' wird prodlike nur dann als Standard verwenden, wenn TEST_DATABASE_NAME nicht bereits definiert wurde. Keine unordentlichen bedingten Blöcke. Alles in einer Codezeile. –
Die Standardlösung bedingt eine Variable (ob in der Umwelt oder nicht) zuzuordnen ist:
: ${VAR=foo}
Das VAR auf den Wert „foo“ gesetzt wird nur, wenn es nicht gesetzt ist.
So zu legen VAR "foo", wenn VAR nicht gesetzt oder die leere Zeichenkette, die Verwendung ist:
: ${VAR:=foo}
Um VAR in der Umwelt zu setzen, Follow-up mit:
export VAR
Sie auch tun können export VAR=${VAR-foo}
oder export VAR=${VAR:=foo}
, aber einige ältere Shells unterstützen die Syntax von Zuweisung und Export in derselben Zeile nicht. Auch DRY; die Verwendung des Namens auf beiden Seiten des =
Operators ist unnötige Wiederholung. (Eine zweite Linie der Variable exportieren verletzt das gleiche Prinzip, aber fühlt sich besser.)
Beachten Sie, dass es sehr schwierig, im Allgemeinen ist, um zu bestimmen, ob eine Variable in der Umgebung ist. Das Analysieren der Ausgabe von env
wird nicht funktionieren. Bedenken Sie:
export foo='
VAR=var-value'
env | grep VAR
Auch funktioniert es einen Sub-Shell und Test zum Laichen:
sh -c 'echo $VAR'
dass der VAR zeigen würde, wird in dem Sub-Shell gesetzt, was ein Indikator dafür sein würde, dass VAR ist in der Umgebung von der aktuelle Prozess, aber es kann einfach sein, dass VAR in der Initialisierung der Subshell festgelegt ist. Funktionell ist das Ergebnis jedoch dasselbe wie wenn VAR in der Umgebung ist. Zum Glück kümmert es Sie normalerweise nicht, ob VAR in der Umgebung ist oder nicht. Wenn Sie es dort brauchen, legen Sie es dort hin. Wenn Sie es brauchen, nehmen Sie es heraus. Eigentlich
Könnten Sie eine Erklärung hinzufügen, wie die Notation ': $ {VAR: = foo}' intern funktioniert? Ich finde es immer als die Lösung, aber nie, wie es tatsächlich funktioniert. –
Ich habe eine Erklärung zu [StackOverflow] (http://stackoverflow.com/questions/4437573/bash-assign-default-value) gefunden! –
- 1. TCL: Wie überprüft man, ob die Umgebungsvariable bereits gesetzt ist
- 2. Wie überprüfen, ob Objektvariable gesetzt ist
- 3. VBA überprüfen, ob Objekt gesetzt ist
- 4. Überprüfen, ob Sitzungsschlüssel in Django gesetzt ist
- 5. Wie überprüfe ich, ob eine Umgebungsvariable in PHP gesetzt ist?
- 6. überprüfen, ob ein Benutzer bereits angemeldet ist?
- 7. Wie kann ich überprüfen, ob eine Umgebungsvariable im Knoten js gesetzt ist?
- 8. Wie überprüft man, ob eine Umgebungsvariable entweder nicht gesetzt oder auf die leere Zeichenfolge gesetzt ist?
- 9. Überprüfen, ob die Zeichenfolge die Umgebungsvariable enthält
- 10. Überprüfen Sie, ob die maximale Breite in jQuery gesetzt ist.
- 11. TERM Umgebungsvariable nicht gesetzt
- 12. Überprüfen, ob das JSP-Fragment gesetzt wurde
- 13. Esper EQL überprüfen, ob Attribut gesetzt
- 14. Überprüfen, ob der Fokus auf Excel-Zelle gesetzt ist
- 15. Überprüfen, ob Variable gesetzt ist, nicht null und nicht leer
- 16. Überprüfen, ob Realm-Objekt bereits existiert
- 17. Wie überprüfen, ob id bereits vorhanden - codeigniter
- 18. Überprüfen Sie, ob der Benutzer bereits mit Auth.GoogleSignInApi angemeldet ist.
- 19. Überprüfen Sie, ob ein GoogleMap-Canvas-Element bereits inaktiv ist
- 20. PHP Überprüfen, ob der Benutzer bereits registriert ist
- 21. Überprüfen, ob ein Benutzername bereits in der Datenbank ist C#
- 22. Überprüfen Sie, ob das Wort bereits in DB (PHP) ist
- 23. TweetSharp: Wie Sie überprüfen, ob Ihre Anwendung bereits autorisiert ist?
- 24. Überprüfen Sie, ob Artikel ist bereits im Kontextmenü
- 25. Wie überprüfen, ob eine Aufgabe bereits in Python-Warteschlange ist?
- 26. Überprüfen, ob das Objekt bereits im Entity Framework-Kontext ist
- 27. In Rails 4.2 überprüfen, ob ein Job bereits eingereiht ist
- 28. Überprüfen Sie, ob eine DLL-Bibliothek bereits geladen ist? (Java)
- 29. Kann ich überprüfen, ob die Datei bereits geöffnet ist?
- 30. MailItem Attachments - Überprüfen, ob die Datei bereits angehängt ist
, ist dies kein echtes Duplikat dieser Frage: Die OP hier möchte wissen, ob eine Variable gesetzt wurde, und wenn nicht etwas dagegen tun, statt ein Skripts des Beenden. $ {V :?} ist in diesem Fall keine gültige Antwort. 'setzen | grep -q '^ V =' 'ist. Dies testet auf das Vorhandensein der Variablen und funktioniert auch, wenn die Variable festgelegt wurde, aber auf die leere Zeichenfolge. – Coroos