Website-Suche

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"

Eine Variable deklarieren

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 -p

Dies zeigt alle Variablen und ihre Werte.

2.2. Eine bestimmte Variable auflisten

declare -p my_var

Ausgabe :

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 error

Das -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: 15

Das -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 cherry

Um auf einzelne Elemente des Arrays zuzugreifen:

echo "${my_array[0]}"  # Output: apple
echo "${my_array[1]}"  # Output: banana
echo "${my_array[2]}"  # Output: cherry

Durch das Array Schleifen:

for item in "${my_array[@]}"; do
    echo "$item"
done

Die Länge des Arrays erhalten:

echo "${#my_array[@]}"  # Output: 3

Ein neues Element hinzufügen:

my_array+=("date")
echo "${my_array[@]}"  # Output: apple banana cherry date

Entfernen eines Elements:

Um das zweite Element (banana bei Index 1) zu entfernen:

unset my_array[1]
echo "${my_array[@]}"  # Output: apple cherry date

3.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: red

Alle Schlüssel drucken:

echo "${!my_assoc_array[@]}"   # Output: fruit color

Alle Werte drucken:

echo "${my_assoc_array[@]}"   # Output: apple red

Durch das Array Schleifen:

for key in "${!my_assoc_array[@]}"; do
    echo "$key => ${my_assoc_array[$key]}"
done

Ausgabe :

fruit => apple
color => red

Hinzufü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: circle

Entfernen 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!"
fi

Ausgabe :

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 Value

Was 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_function

Die Ausgabe wird sein:

this is local

Auch wenn "This is local" Großbuchstaben enthält, declare -l erzwingt, dass alle Zeichen in Kleinbuchstaben sind.

4.2. Alle Funktionen auflisten (-f)

declare -f

Dies zeigt alle definierten Funktionen zusammen mit ihrem Inhalt.

4.3. Nur Funktionsnamen auflisten (-F)

declare -F

Dies zeigt nur die Funktionsnamen ohne ihre Definitionen.

4.4. Eine Funktion exportieren

declare -xf my_function

Das -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"
fi

Ersetzen 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=hello

Um es zu überprüfen, drucken Sie den Variablenwert aus:

echo $num

Es 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_var

Um eine Funktion zu entfernen:

unset -f function_name

Beispiel: 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_function

Zusammenfassung der declare-Optionen

OptionZweck
-aDeklariere ein indiziertes Array.
-ADeklariere ein assoziatives Array (Bash 4+).
-iDeklariere eine Ganzzahlvariable.
-rDeklariere eine schreibgeschützte Variable oder Funktion.
-xExportiere die Variable oder Funktion in die Umgebung.
-fDie Definition einer Funktion anzeigen.
-FZeige die Namen aller Funktionen an.
-lWandeln Sie den Wert in Kleinbuchstaben um (für Variablen).
-uWandeln Sie den Wert in Großbuchstaben um (für Variablen).
-pZeige 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.