[Cologne-pm] Sonderzeichen innerhalb ARGV maskieren?

A. Pagaltzis pagaltzis at gmx.de
Mon Nov 15 08:11:27 CST 2004


Bitte antworten auf Mails an die Liste, sofern sie nicht für die
Liste offtopic sind, auch wieder an die Liste schicken und nicht
an den Poster privat. Ein öffentliches Forum ist sinnlos, wenn
Fragen privat beantwortet werden; erstens hat dann niemand ausser
dem Fragesteller etwas von der Antwort, zweitens kann niemand
anders einen zusätzlichen Kommentare beitragen.

* ports <ml at portsonline.net> [2004-11-14 16:13]:
> Ok, hier ist mein Testcode...
> 
> [-------------------- schnipp --------------------]
> #perl
> 
> $round = 0;
> 
> if ($#ARGV < 0) { exit(1); }
> 
> foreach (@ARGV) {
>     print $round, " - \$ARGV[", $round, "]: ", $ARGV[$round], "\n";
>     $round +=1;
> }
> exit(1);
> [-------------------- schnapp --------------------]
> 
> Dann einmal aus einer Cygwin Console unter Windows.
> 
> $ perl -w argv.pl argument c:\leer zeichen\test rest
> 0 - $ARGV[0]: argument
> 1 - $ARGV[1]: c:leer
> 2 - $ARGV[2]: zeichentest
> 3 - $ARGV[3]: rest
> 
> Noch mal aus einer Windows Cygwin Console. Diesmal aber mit ".
> 
> $ perl -w argv.pl argument "c:\leer zeichen\test" rest
> 0 - $ARGV[0]: argument
> 1 - $ARGV[1]: c:\leer zeichen\test
> 2 - $ARGV[2]: rest
> 
> Wie ich also eben durch Zufall[1] entdeckt habe, muessen die Argumente
> ggf. in " oder ' gesetzt werden.

Ja. Das hat nichts mit Perl zu tun, sondern ist Sache der Shell
und verhält sich überall genauso -- ausser in der Windows-Welt,
die ihre Wurzeln in DOS hat, wo Microsoft, um anders zu sein als
Unix, von allen denkbaren Zeichen ausgerechnet den Backslash als
Pfadtrenner ausgesucht hat, der in jedem richtigen System von der
Shell als Sonderzeichen verstanden wird und zum Entwerten
(neudeutsch escapen) des nachfolgenden Zeichens dient.

Du kannst die Backslashes übrigens auch doppeln, dann entwertet
der erste Backslash den zweiten eines Paares, und es kommt genau
einer dabei heraus.

Alternativ kannst du (wenig bekannte Tatsache) auch unter
DOS/Windows den Slash als Trenner benutzen -- ausser in
COMMAND.COM. Über CMD.EXE bin ich mir nicht im Klaren. Du kannst
also auch C:/foo/bar.baz schreiben und dir das Herumgealbere mit
dem hirntoten Pfadtrenner von WinDOS sparen.

Gruss,
-- 
Aristoteles
"Wer nicht über sich selbst lachen kann, nimmt das Leben nicht ernst genug."


More information about the Cologne-pm mailing list