Bash declare-Befehl Verwendung mit Beispielen
Der declare-Befehl in Bash wird verwendet, um Variablen und Funktionen zu definieren, zu ändern und anzuzeigen. Im Bash-Scripting ist der Hauptzweck des declare-Befehls, Attribute für Variablen und Funktionen festzulegen und ihren aktuellen Zustand anzuzeigen.
In diesem Tutorial werden wir lernen, wie man den Befehl declare in Bash-Skripten mit Beispielen unter Linux verwendet.
1. Grundlegende Verwendung des Befehls declare in Bash
1.1. Eine Variable definieren
Der declare-Befehl wird häufig verwendet, um Variablen mit bestimmten Attributen zu definieren.
declare my_var="Hello, World!"
echo "$my_var"Dies funktioniert genauso wie eine normale Variablenzuweisung (my_var="Hello, World!").
1.2. Eine Variable in Großbuchstaben umwandeln
declare -u upper_var="hello world"
echo "$upper_var" # Outputs "HELLO WORLD"
Das -u-Flag wandelt den Wert von upper_var in Großbuchstaben um.
1.3. Eine Variable in Kleinbuchstaben umwandeln
declare -l lower_var="HELLO WORLD"
echo "$lower_var" # Outputs "hello world"Das -l-Flag wandelt den Wert von lower_var in Kleinbuchstaben um.
2. Auflisten von Variablen und ihren Werten
2.1. Alle Variablen auflisten
declare -pDies zeigt alle Variablen und ihre Werte.
2.2. Eine bestimmte Variable auflisten
declare -p my_varAusgabe :
declare -- my_var="Hello, World!"Das declare -- bedeutet, dass es sich um eine normale Variable ohne besondere Attribute handelt.
3. Spezielle Attribute mit declare
3.1. Eine Variable schreibgeschützt machen (-r)
Setzen Sie eine schreibgeschützte Variable:
declare -r readonly_var="Fixed Value"
readonly_var="New Value" # This will cause an errorDas -r-Flag macht readonly_var schreibgeschützt. Ein Versuch, es zu ändern, führt zu einem Fehler. Einmal gesetzt, kann es nicht mehr geändert werden.
3.2. Eine Variable zur Ganzzahl zwingen (-i)
Bash wird die Variable als Zahl behandeln und automatisch Berechnungen durchführen.
declare -i num=10
num+=5
echo "$num" # Output: 15Das -i-Flag macht num zu einer ganzen Zahl. Wenn Sie einen nicht-ganzzahligen Wert zuweisen, wird standardmäßig 0 verwendet.
Wenn Sie versuchen, einen nicht-numerischen Wert zuzuweisen, wird er ignoriert:
num="hello"
echo "$num" # It will display 0.3.3. Eine Variable als indiziertes Array festlegen
declare -a my_array=("apple" "banana" "cherry")
Das -a-Flag macht my_array zu einem indexierten Array.
Um das gesamte Array auszugeben, können Sie verwenden:
echo "${my_array[@]}"Beispielausgabe:
apple banana cherryUm auf einzelne Elemente des Arrays zuzugreifen:
echo "${my_array[0]}" # Output: apple
echo "${my_array[1]}" # Output: banana
echo "${my_array[2]}" # Output: cherryDurch das Array Schleifen:
for item in "${my_array[@]}"; do
echo "$item"
doneDie Länge des Arrays erhalten:
echo "${#my_array[@]}" # Output: 3Ein neues Element hinzufügen:
my_array+=("date")
echo "${my_array[@]}" # Output: apple banana cherry dateEntfernen eines Elements:
Um das zweite Element (banana bei Index 1) zu entfernen:
unset my_array[1]
echo "${my_array[@]}" # Output: apple cherry date3.4. Eine Variable als assoziatives Array setzen (Bash 4+)
declare -A my_assoc_array=([fruit]="apple" [color]="red")Dies erstellt ein assoziatives Array (auch als Wörterbuch oder Hash-Map bezeichnet) in Bash, bei dem Schlüssel (anstatt numerischer Indizes) bestimmten Werten zugeordnet sind.
Das -A-Flag macht my_assoc_array zu einem assoziativen Array (Schlüssel-Wert-Paare).
Zugriff auf Elemente:
echo "${my_assoc_array[fruit]}" # Output: apple
echo "${my_assoc_array[color]}" # Output: redAlle Schlüssel drucken:
echo "${!my_assoc_array[@]}" # Output: fruit colorAlle Werte drucken:
echo "${my_assoc_array[@]}" # Output: apple redDurch das Array Schleifen:
for key in "${!my_assoc_array[@]}"; do
echo "$key => ${my_assoc_array[$key]}"
doneAusgabe :
fruit => apple
color => redHinzufügen eines neuen Schlüssel-Wert-Paares:
my_assoc_array[shape]="circle"
echo "${!my_assoc_array[@]}" # Output: fruit color shape
echo "${my_assoc_array[shape]}" # Output: circleEntfernen eines Schlüssels
unset my_assoc_array[color]
echo "${!my_assoc_array[@]}" # Output: fruit shapeÜberprüfen, ob ein Schlüssel existiert:
if [[ -v my_assoc_array[fruit] ]]; then
echo "Key 'fruit' exists!"
fiAusgabe :
Key 'fruit' exists!3.5. Eine Variable an Unter-Shells exportieren (-x)
Dies macht eine Variable für untergeordnete Prozesse verfügbar.
declare -x my_env_var="Exported Value"Dieser Befehl erstellt eine Umgebungsvariable (my_env_var) und macht sie für untergeordnete Prozesse (wie eine neue Bash-Shell) verfügbar.
bash -c 'echo "$my_env_var"' # Output: Exported ValueWas passiert, wenn wir declare -x nicht verwenden?
my_env_var="Not Exported"
bash -c 'echo "$my_env_var"'Sie werden eine leere Ausgabe sehen.
Ohne -x existiert die Variable nur in der aktuellen Shell und wird nicht an Kindprozesse weitergegeben.
Alternativ können wir export anstelle von declare -x verwenden.
export my_env_var="Exported Value"Sowohl declare -x als auch export machen Variablen für Unterschalen verfügbar.
4. Verwalten von Funktionen mit declare
4.1. Festlegen von Attributen für Funktionen
Wie ich bereits erwähnt habe, ermöglicht der Befehl declare das Festlegen verschiedener Attribute für Variablen und Funktionen. Zum Beispiel, um eine Variable lokal für eine Funktion zu machen:
my_function() {
declare -l local_var="This is local"
echo "$local_var"
}Das -l-Flag macht local_var lokal für die Funktion.
Wenn Sie die Funktion aufrufen:
my_functionDie Ausgabe wird sein:
this is localAuch wenn "This is local" Großbuchstaben enthält, declare -l erzwingt, dass alle Zeichen in Kleinbuchstaben sind.
4.2. Alle Funktionen auflisten (-f)
declare -fDies zeigt alle definierten Funktionen zusammen mit ihrem Inhalt.
4.3. Nur Funktionsnamen auflisten (-F)
declare -FDies zeigt nur die Funktionsnamen ohne ihre Definitionen.
4.4. Eine Funktion exportieren
declare -xf my_functionDas -xf-Flag macht my_function für untergeordnete Prozesse (z. B. Skripte oder Subshells) verfügbar.
5. Überprüfen, ob eine Variable oder Funktion existiert
Der declare-Befehl kann auch verwendet werden, um zu überprüfen, ob eine Variable oder Funktion existiert:
if declare -p variable_name &>/dev/null; then
echo "Variable exists"
fiErsetzen Sie variable_name durch den tatsächlichen Namen.
6. Attribute entfernen
Denken Sie daran, dass wir -i verwenden, wenn wir eine Variable deklarieren. Wir können + anstelle von - verwenden, um ein Attribut zu entfernen. Zum Beispiel:
declare +i num # Removes the integer attribute from `num`.Sie können jetzt ein anderes Attribut (z. B. einen String) ohne Fehler zuweisen:
num=helloUm es zu überprüfen, drucken Sie den Variablenwert aus:
echo $numEs sollte hello ausgeben.
Bitte beachten Sie, dass declare +i num das Integer-Attribut entfernt, aber die Variable nicht aufhebt oder löscht.
7. Variablen und Funktionen zurücksetzen
Wir können Variablen oder Funktionen mit dem Befehl unset entfernen.
Um eine Variable zu entfernen:
unset my_varUm eine Funktion zu entfernen:
unset -f function_nameBeispiel: Kombination von Variablen- und Funktionsverwaltung
Das folgende Beispiel zeigt, wie declare sowohl für Variablen als auch für Funktionen verwendet werden kann:
# Declare an integer variable
declare -i num=10
# Declare a read-only variable
declare -r readonly_var="This cannot be changed"
# Declare a function
my_function() {
declare -l local_var="This is local"
echo "$local_var"
}
# List all functions
declare -F
# View the definition of my_function
declare -f my_functionZusammenfassung der declare-Optionen
| Option | Zweck |
|---|---|
-a | Deklariere ein indiziertes Array. |
-A | Deklariere ein assoziatives Array (Bash 4+). |
-i | Deklariere eine Ganzzahlvariable. |
-r | Deklariere eine schreibgeschützte Variable oder Funktion. |
-x | Exportiere die Variable oder Funktion in die Umgebung. |
-f | Die Definition einer Funktion anzeigen. |
-F | Zeige die Namen aller Funktionen an. |
-l | Wandeln Sie den Wert in Kleinbuchstaben um (für Variablen). |
-u | Wandeln Sie den Wert in Großbuchstaben um (für Variablen). |
-p | Zeige die Attribute und den Wert einer Variable an. |
Fazit
Der declare-Befehl ist einer der nützlichen Befehle im fortgeschrittenen Bash-Scripting. Er wird hauptsächlich verwendet, um:
- Definieren und verwalten Sie Variablen mit spezifischen Attributen (z. B. Ganzzahlen, Arrays, nur lesbar),
- Funktionen definieren und verwalten (z. B. auflisten, anzeigen oder exportieren),
- Attribute für Variablen und Funktionen setzen oder entfernen.
Ich hoffe, das hilft.
