Auf ungebundene Variablen stoßen
Nachdem wir die Grundlagen von Variablen verstanden haben, wollen wir untersuchen, was passiert, wenn wir versuchen, eine Variable zu verwenden, der kein Wert zugewiesen wurde – eine ungebundene Variable.
Was sind ungebundene Variablen?
Eine ungebundene Variable, auch als nicht gesetzte Variable bezeichnet, ist eine Variable, der in Ihrem Skript kein Wert zugewiesen wurde. Wenn Sie versuchen, eine ungebundene Variable zu verwenden, behandelt Bash sie typischerweise als leere Zeichenkette, was subtile Fehler in Ihren Skripten verursachen kann.
Erstellen wir ein neues Skript, um dies in Aktion zu sehen:
- Erstellen Sie eine neue Datei namens
unbound.sh
in Ihrem Projektverzeichnis mit dem folgenden Inhalt:
#!/bin/bash
## A variable that is properly set
username="labex"
## Try to use a variable that hasn't been set
echo "Hello, $username! Your home directory is $home_dir"
## Try to do math with an unbound variable
total=$((count + 5))
echo "Total: $total"
- Machen Sie das Skript ausführbar:
chmod +x unbound.sh
- Führen Sie das Skript aus:
./unbound.sh
Sie sollten eine Ausgabe ähnlich dieser sehen:
Hello, labex! Your home directory is
Total: 5
Beachten Sie, dass $home_dir
als Leerzeichen erscheint und $count
in der Berechnung als 0 behandelt wird. Dieses stille Verhalten kann zu Fehlern führen, die schwer zu finden sind.
Erkennen ungebundener Variablen
Ändern wir unser Skript, um diese ungebundenen Variablen zu erkennen. Eine Möglichkeit, dies zu tun, ist die Verwendung von bedingten Überprüfungen, bevor die Variablen verwendet werden:
- Öffnen Sie
unbound.sh
und ersetzen Sie den Inhalt durch:
#!/bin/bash
## A variable that is properly set
username="labex"
## Check if home_dir is set before using it
if [ -z "$home_dir" ]; then
echo "Warning: home_dir is not set!"
home_dir="/home/default"
echo "Using default: $home_dir"
else
echo "Home directory is: $home_dir"
fi
## Check if count is set before doing math
if [ -z "$count" ]; then
echo "Warning: count is not set!"
count=10
echo "Using default count: $count"
fi
total=$((count + 5))
echo "Total: $total"
- Speichern Sie die Datei und führen Sie sie erneut aus:
./unbound.sh
Die Ausgabe sollte nun sein:
Warning: home_dir is not set!
Using default: /home/default
Warning: count is not set!
Using default count: 10
Total: 15
Dieser Ansatz hilft Ihnen, ungebundene Variablen abzufangen und explizit zu behandeln, anstatt sie stille Fehler verursachen zu lassen.
Testen mit der Option set -u
Eine andere Möglichkeit, ungebundene Variablen zu erkennen, ist die Verwendung der Option set -u
, die Bash sofort beendet, wenn sie auf eine ungebundene Variable stößt:
- Erstellen Sie eine neue Datei namens
strict.sh
mit dem folgenden Inhalt:
#!/bin/bash
set -u ## Exit when unbound variable is used
echo "My username is $username"
echo "My favorite color is $favorite_color"
echo "This line won't be reached if favorite_color isn't set"
- Machen Sie sie ausführbar:
chmod +x strict.sh
- Führen Sie das Skript aus:
./strict.sh
Sie sollten eine Fehlermeldung ähnlich dieser sehen:
./strict.sh: line 4: favorite_color: unbound variable
Das Skript beendet sich sofort in Zeile 4, wenn es versucht, die ungebundene Variable $favorite_color
zu verwenden. Dies hilft, ungebundene Variablen frühzeitig zu erkennen und potenzielle Probleme später im Skript zu vermeiden.