Ich möchte sicherstellen, dass an einem bestimmten Punkt eines Skripts nach dem source
Einrichten einer Konfigurationsdatei mehrere Variablen festgelegt werden und, falls dies nicht der Fall ist, die Ausführung abgebrochen wird, um dem Benutzer die fehlende Variable mitzuteilen. Ich habe versucht
for var in $one $two $three ; do
...
wenn aber zum Beispiel $two
nicht gesetzt ist, wird die Schleife nie ausgeführt $two
. Das nächste, was ich versuchte, war
for var in one two three ; do
if [ -n ${!var} ] ; then
echo "$var is set to ${!var}"
else
echo "$var is not set"
fi
done
Aber wenn zwei nicht gesetzt ist, bekomme ich immer noch "zwei ist gesetzt" anstelle von "zwei ist nicht gesetzt".
Wie kann ich sicherstellen, dass alle erforderlichen Variablen gesetzt sind?
Update / Lösung: Ich weiß, dass es einen Unterschied zwischen "gesetzt" und "gesetzt, aber leer" gibt. Ich verwende jetzt (danke an /programming//a/16753536/3456281 und die Antworten auf diese Frage) das Folgende:
if [ -n "${!var:-}" ] ; then
Wenn var
also gesetzt, aber leer ist, wird es immer noch als ungültig betrachtet.
set -u
das Skript auch am Anfang anfügen , um es sofort zu beenden, wenn eine nicht festgelegte Variable verwendet wird.