Linux Unterschied von - und --?

3 Antworten

Unix-Befehle sind in der Regel wie folgt aufgebaut:

<befehl> [OPTION]... [FILE]...

Die Optionen können unterschiedlich angegeben werden. Entweder mit einem Bindestrich + einen Buchstaben oder mit zwei Bindestrichen + einem oder mehreren über Bindestrich verbundene Wörter. Hier ein paar Beispiele:

ls -a
ls --all
ls --almost-all
chmod -R
chmod --recursive

Die Schreibweise mit einem Bindestrich ist die Unix-Schreibweise, also ein Bindestrich + ein Buchstabe. Bei Angabe von mehreren Optionen können die Buchstaben hintereinander geschrieben werden. Beispiel

ls -l -a
ls -la

Die Schreibweise mit zwei Bindestrichen ist der GNU-Stil. Bei ganzen alten Unix-Werkzeugen gab es auch die Option ohne Bindestrich. Das findet man etwa beim Werkzeug tar.

Wenn du selbst Software entwickelst, rate ich dir dazu, beides anzubieten, also die Unix-Schreibweise und die GNU-Schreibweise.

Zudem wirst du manchmal isoliert zwei Bindestriche in einem Befehl lesen. Beispiel:

rm -f -- datei

Diese doppelten isolierten Bindestriche geben das Ende der Optionen an. Dies ist manchmal sinnvoll, wenn die Datei mit einer Option verwechselt werden könnte, falls sie auch mit einem Bindestrich beginnt.

Unix/Linux kennt Befehle, die auch Optionen (sogenannte Schalter) benutzen, um andere Funktionen oder de­tail­liert Ausgaben zu machen.
Zu den Dingen, die als Parameter übergeben werden müssten, gehören aber auch z.B. Dateien.
Das Programm (des Befehls) muss aber unterscheiden können, ob es eine Option oder ein Parameter (Filename ... ) ist.
Genau das erfolgt mit dem einfachen - . Dem können , ohne Leerzeichen eine oder mehrere Optionen in beliebiger Reihenfolge folgen.
Bei einem - wird das zugehörige Programm alle nachfolgenden Zeichen als Kennung für Optionen werten. Bisher haben sich die Unix/Linux- Entwickler auch daran gehalten.
Da das Alphabet aber nur 2 x 26 Buchstaben enthält, bei einigen Befehlen aber mehr Optionen vorgesehen sind, müssen Buchstabenkombinationen (Zeichenketten) erlaubt werden. Um das zu unterscheiden werden solche dann mit -- gekennzeichnet.

Als Einzelbuchstaben: z.B.

ls ; ohne Option, ohne Parameter
ls -l ; mit der Option l für long
ls -la oder ls -al oder ls -l -a ;
ls -lah == ls - ahl == ls -hal .....

Mit
ls --help kann also nicht ls -h -e -l -p geschrieben werden.

Hier ist mit "help" eine ganze Zeichenkette die Option.

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995

- wird meist mit einem Buchstaben verwendet, kann dabei aber auch kombiniert werden. Bspw. "ls -lah" statt "ls --list --all --human-readable".

-- wird für ausführlichere Befehle genutzt (s.o.).

Das ist so eine Konvention, glaube ich. Habe ich noch nie hinterfragt. Spannend 🤣

Woher ich das weiß:eigene Erfahrung
guenterhalt  28.11.2020, 16:25
Das ist so eine Konvention, glaube ich.

das ist eine ungeschrieben Regel, die aber nicht alle einhalten.
Bei tar, einem uralten Unix-Befehl ist die Kennung mit dem - nicht mehr notwendig, funktioniert aber (noch?) mit dieser Kennung.

0