Tracks
/
Bash
Bash
/
Lehrplan
/
Variablen
Va

Variablen in Bash

{one: "1 Übung", other: "%{count} Übungen"}

Über Variablen

Variablen

Variablen sind ein Ort, an dem Daten gespeichert werden. Bash kennt zwei Arten von Daten: Strings und Arrays. Über Arrays sprechen wir später.

Du weist eine Variable so zu:

name="value"
Note

Wichtig: Rund um das Gleichheitszeichen darf kein Leerzeichen stehen!

Wenn dort Leerzeichen stehen, wie in diesem Beispiel,

x = 10

dann ruft Bash den Befehl x mit den zwei Argumenten = und 10 auf!

Variablen nennt man auch Parameter. In diesem Dokument verwenden wir beide Begriffe gleichbedeutend.

Einige wichtige Parameter, die Bash verwendet oder setzt, sind:

  • PATH: eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen externe Befehle gesucht werden.
  • IFS: das „interne Feldtrennzeichen“. Wie es verwendet wird, sehen wir weiter unten.
  • PWD: dein aktuelles Arbeitsverzeichnis. Es hat denselben Wert wie die Ausgabe des Befehls pwd.
  • RANDOM: eine Pseudozufalls-Ganzzahl zwischen 0 und 32767.
  • BASH_VERSION: der Versions-String der laufenden Bash-Instanz.

Variablennamen

Ein Variablenname besteht aus Großbuchstaben, Kleinbuchstaben, Ziffern und Unterstrich. Er darf nicht mit einer Ziffer beginnen.

Caution

Es gilt als bewährte Praxis, Variablennamen in Großbuchstaben zu vermeiden. Die Shell verwendet diese Konvention für ihre Parameter, und du willst nicht versehentlich Shell-Parameter überschreiben, die eine besondere Bedeutung haben. Zum Beispiel: 1, 2, 3

Parametererweiterung

Den Wert eines Parameters erhältst du mit der Syntax $varname.

x=10
echo "The value of x is $x"

Damit der Variablenname nicht mit dem umgebenden Text verwechselt wird, kannst du ihn in geschweifte Klammern setzen. Um zum Beispiel den String 10x10 auszugeben:

echo "${x}x$x"
# or
echo "${x}x${x}"

Einige Styleguides empfehlen, geschweifte Klammern in den meisten Fällen zu verwenden, um die Lesbarkeit und/oder Einheitlichkeit zu verbessern.

Positionsparameter

Wie wir in der Lektion Befehle und Argumente besprochen haben, können Befehle Argumente entgegennehmen. Bash-Skripte sind da keine Ausnahme. Die Argumente der aktuellen Bash-Instanz heißen Positionsparameter. Du rufst sie mit diesen speziellen Parametern ab:

  • $1: der erste Positionsparameter
  • $2 ... $9: die weiteren Parameter
  • ${10} ...: zweistellige Zahlen erfordern geschweifte Klammern.
  • $0: der Name des aktuellen Skripts.

Argumente einer Shell-Funktion sind ebenfalls Positionsparameter und werden genauso behandelt. Mehr über Funktionen sehen wir in einer späteren Lektion.

Spezielle Positionsparameter

Es gibt einige spezielle Parameter, die dir den Umgang mit den Positionsparametern erleichtern.

  • $# wird zur Anzahl der Positionsparameter expandiert.
  • "$@" wird zur Liste aller Positionsparameter expandiert, jeder als eigenes Wort.
  • "$*" wird zu einem einzigen String expandiert, in dem alle Positionsparameter durch ein Zeichen verbunden sind.
    • Das Verbindungszeichen ist das erste Zeichen der Variable $IFS, standardmäßig ein Leerzeichen.

Mit "$@" übergibst du Positionsparameter am sichersten an einen anderen Befehl und behältst dabei die sichere Quotierung bei. Damit durchläufst du auch die Positionsparameter:

for arg in "$@"; do
    do_something_with "$arg"
done

In der Praxis wird "$@" häufiger verwendet als "$*".

Befehlssubstitution

Eine sehr häufige Operation in Bash-Skripten ist es, die Ausgabe eines Befehls abzufangen und in einer Variable zu speichern. Dazu verwendest du die Befehlssubstitution.

var=$(command)

Um zum Beispiel einen String in Großbuchstaben umzuwandeln, machst du Folgendes:

text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!

Mehr zur Parametererweiterung

Bash bringt viele eingebaute Möglichkeiten mit, um Variablen und Strings zu bearbeiten, sodass du keine externen Befehle aufrufen musst.

  • Text in Großbuchstaben umwandeln. Im vorigen Abschnitt habe ich gezeigt, wie du mit tr Text in Großbuchstaben umwandelst. In Bash geht das so:

    echo "${text^^}"
    

    Analog wandelt ${text,,} den Wert in Kleinbuchstaben um.

  • Einen Standardwert angeben, wenn die Variable leer ist.

    default="nothing here"
    result=""
    echo "${result:-$default}"
    # => nothing here
    
  • Suchen und Ersetzen.

    text="Hello world!"
    echo "${text//[aeiou]/X}"
    # => HXllX wXrld!"
    

Es gibt noch viele weitere interessante Parametererweiterungen: einen Teilstring extrahieren, die Stringlänge ermitteln, einen Standardwert zuweisen, Text am Anfang oder Ende des Werts entfernen und mehr. Lies mehr dazu im Handbuch.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab