Kommandozeilenparameter * unter Linux
-
hi,
ich hab ein c-programm wo ich als eingabeparameter unter anderem ein das * Symbol zulässig ist.
seltsamerweise krieg ich das ganze aktuelle arbeitsverzeichnis als Eingabeparameter wenn ich das * Symbol benutze.
Der Aufruf ./pgm 3 * 5
liest mir das ganze aktuelle Ordnerverzeichnis aus und gibt mir das als Eingabeparameter.
Scheinbar ist ja das * Symbol schon belegt mit einer build-in funktion? Ich wusste aber nicht wonach ich googlen sollt weswegen ich die Frage jetzt hier poste.
Was macht das * genau wenn man das in der Parameterliste angibt ?
-
Es gibt alle nicht versteckten Dateien und Verzeichnisse im aktuellen Verzeichnis an.
Wenn du es einem Programm als Parameter mitgeben möchtest, kannst du es entweder in Anführungszeichen setzen oder einfach mit einem Backslash escapen.
-
qsid20 schrieb:
Scheinbar ist ja das * Symbol schon belegt mit einer build-in funktion? Ich wusste aber nicht wonach ich googlen sollt weswegen ich die Frage jetzt hier poste.
Diese built-ins nennt man Globs, siehe hierzu auch man: glob(7).
-
qsid20 schrieb:
Scheinbar ist ja das * Symbol schon belegt mit einer build-in funktion? Ich wusste aber nicht wonach ich googlen sollt weswegen ich die Frage jetzt hier poste.
Das Symbol wird von der Shell noch bevor dein Programm startet durch die zutreffenden Dateinamen ersetzt. Wenn du das nicht willst, kannst du, wie hier schon gesagt, dein Programm so aufrufen:
./pgm "3 * 5"