# Kommandoeingabe

Der grundlegende Aufbau (nach weit verbreiteter Syntax) eines Kommandos sollte wie folgt aussehen:

`kommandoname [-Optionen] [Argumente...]`

Optionen werden hierbei mittels "-" eingeleitet und bestehen zumeist aus nur einem Buchstaben. Mehrere Optionen können gruppiert werden `ls -la`. Dem Kommando können beliebig viele Argumente übergeben werden. Meist können Optionen und Argumente in ihrer Reihenfolge vertauscht werden.

Das führende Minus zur Einleitung von Optionen ist gemäß dem Unix98-Standard. Einige Kommandos wie (`ps`, `tar`,...) verwenden darüber hinaus auch Optionen nach der BSD-Syntax, nach der kein führendes Minus vorgeschrieben ist. Ebenfalls Verwendung finden oft die GNU-Regeln für lange Optionen, die durch zwei führende Minus-Zeichen eingeleitet werden.

# Parsen der Kommandozeile

Bevor ein Kommando zur Ausführung gebracht wird, bewertet die Shell die ihr übergebene Kommandozeile. Die Shell parst dazu die Eingabe und sucht nach Zeichenfolgen mit Sonderbedeutungen. Anschließend versucht die Bash, diese Zeichenketten zu substituieren. Die Reihenfolge der Betrachtung der Argumente spielt für das Verständnis der Shell eine große Rolle. Den in der nachfolgenden Aufzählung genannten Substitutionsmechanismen wenden wir uns im Abschnitt Substitutionen zu.

1. Geschweifte Klammern `{ , }`
: Liste(n) von Zeichenketten werden zu neuen Elementen kombiniert.
2. Tilde `~`: Nachfolgende Buchstaben bis zum ersten `/` werden als Benutzername interpretiert (und anderes mehr...).
3. Parametersubstitution `${...}`: Ersetzung in Abhängigkeit von Bedingungen.
4. Kommandosubstitution `$(...)`, ``...``: Die eingeschlossenen Kommandos werden ausgeführt und das Konstrukt durch das Ergebnis ersetzt.
5. Arithmetische Substitution `$((...))` und Variablensubstitution: Arithmetische Ausdrücke werden durch ihre Ergebnisse und Variablen durch ihren Inhalt ersetzt.
6. Prozesssubstitution `<(...)`, `>(...)`: Die Eingabe/Ausgabe der Prozesse wird mit einer Named Pipe verbunden.
7. Worttrennung: Trennen der Kommandozeile an den "Whitespaces" (Leerzeichen, Tabulator, Newline)
8. Pfadnamensexpansion: Die Wildcards werden als Suchmuster verwendet.