FUNKTION:
varargs string *glob(string cmdline, int no_normalize)
IMPLEMENTIERT:
/std/shells/filesys/filesys.c
ARGUMENTE:
cmdline: das zu parsende Kommando
no_normalize: keine Filenamen erzeugen wenn gesetzt
BESCHREIBUNG:
Mit glob() kann man die Parameter eines Kommandos aufbereiten.
Das Kommando wird in seine 'Wortstuecke' zerlegt (wobei
'"' zusammengehoerige Stuecke zusammenschliessen koennen) und
ausgewertet als:
- Filenamen Parameter
- Schalter Parameter
Das Magierkommando 'ls -l ~/bla*' wird dabei also zerlegt in
den Schalter "-l" und die Datei "/players/fiona/blah".
Moechte man das Auswerten der Filenamen verhindern, so kann
man das no_normalize-Flag setzen.
Die Schalter kann man mit GetOpt() weiter auswerten.
Das Verhalten ist ganz analog zu der Auswertung, die bei einer
normalen (Unix-) Shell passiert. (Es sind jedoch keine
Singlequotes '\'' zugelassen.)
RÜCKGABEWERT:
Ein Array aus Strings, eins fuer jedes Wortstueck.
BEMERKUNG:
Wenn Normalisierung der Filenamen gewuenscht ist, muss das
Objekt QueryProp(P_CURRENTDIR) 'koennen'. Oftmals nutzt man
dies indem man magier->glob() verwendet. Ererbt man glob() so
kann man ggf nur no_normalize globben.
BEISPIEL:
filesys->glob("-ds \"help \\\"blah*\"", 1)
Result: ({"-ds","help \\\"blah*"})
Das Ganze ist wegen der in Strings erforderlichen Escapes etwas
undurchsichtig. Ausgegeben sehen die Strings so aus:
'-ds "help \"blah*"'
({'-ds', 'help \"blah*'})
Man kann also innerhalb mit '"' geschuetzter Bereiche durchaus
auch '"' haben, wenn man sie mittels '\' schuetzt.
SIEHE AUCH:
GetOpt(L), P_CURRENTDIR
|