Re: audio-cd

From: Oliver Fromme <olli(at)secnetix.de>
Date: Fri, 22 Mar 2002 17:02:48 +0100 (CET)

clemensF <ino-waiting(at)gmx.net> wrote:
> > Oliver Fromme:
> > Weil das nicht in jedem Fall genügt. Davon abgesehen ver-
> > wende ich persönlich nie Whitespace in Dateinamen, weil es
> > immer mal wieder Programme und Skripte gibt, die mit sowas
> > Ärger machen.
>
> bitte? quoting genuegt nicht, um whitespace irgendwo gefahrlos
> unterzubringen?

Nein, das habe ich nicht geschrieben, dreh mir bitte nicht
die Worte im Mund um. Korrektes Quoting genügt natürlich,
aber mit "$var" ist das nicht unbedingt getan. Quoting be-
deutet nicht, einfach nur alles in doppelte Anführungszei-
chen zu schreiben.

> zeig mir mal den fall, wo du mit "foo bar" als
> filenamen baden gehst.

Zum Beispiel, wenn Backticks im Spiel sind, in Verbindung
mit Variablen, die Whitespace enthalten (und das Ergebnis
enthält auch wieder Whitespace). Quoting in sh ist kom-
plexer, als man auf den ersten Blick denken mag, und es hat
eine Reihe von Tücken und Stolperfallen.

Einfaches (!) Beispiel zur Demonstration:

   #!/bin/sh -
   uppercase()
   {
           echo "$1" | tr 'a-z' 'A-Z'
   }
   printargs()
   {
           for i in "$@"; do
                   echo "\"$i\""
           done
           echo
   }
   printargs `uppercase $1`
   printargs `uppercase "$1"`
   printargs "`uppercase $1`"
   printargs "`uppercase \"$1\"`"

Ruf das mal mit Argument "foo bar" auf. Ergebnis:

   "FOO"

   "FOO"
   "BAR"

   "FOO"

   "FOO BAR"

Nur das letzte ist natürlich das Gewünschte. In dem
ersten Shell-Skript-Schnipsel in diesem Thread (Schleife
mit mpg123) kam genau so ein Fall vor.

Und es gibt Fälle, wo es noch komplizierter ist, beispiels-
weise wenn das Tool, das man aufruft, einige Zeichen wie-
derum selbst interpretiert (z.B. sed). Dann muß man auf
drei Ebenen quoten: erst die Variablen der Shell, dann die
Argumente für das Tool, dann das Ergebnis für die Shell.
Man kann auch Backticks ineinander schachteln, wenn man
will, aber dann wird es _richtig_ gemein (das sollte man
dann auf mehrere Shellkommandos aufteilen, und/oder die
$()-Syntax verwenden.)

Bei interaktiver Benutzung sind Leerzeichen und andere
Sonderzeichen in Dateinamen relativ harmlos. Die meisten
besseren Shells sind ja in der Lage, sowas von selbst zu
expandieren und Quoten dabei nötigenfalls auch automatisch
die Sonderzeichen. Probleme bereiten halt nur Skripte und
Programme, bei denen der Autor sowas nicht berücksichtigt
hat.

Übrigens, unter UNIX gibt es nur zwei Zeichen, die in
Dateinamen nicht vorkommen dürfen, nämlich '/' und '\0'.
Spaces sind noch harmlos, interessant wird es z.B. bei
Backslashes, Backspaces, Return, Linefeed u.ä.

> die vorteile fuer den reinen anwender sind riesig. und jeder von uns hat
> schon ueber die "selbstdokumentierenden" variablennamen anderer geflucht.

Achja? Ich nicht. Ich fluche immer über zu kurze Varia-
blennamen, bei denen anhand des Namens völlig unklar ist,
was sie bedeuten. Der Gipfel war ein Programmierer, der
mir weismachen wollte, daß die Programme dann schneller
laufen, wenn man kurze Variablennamen nimmt. Schwachfug.

Gruß
   Olli

PS: Es gibt natürlich Ausnahmen, wie das verbreitete »i«
für generische Schleifenzähler.

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"All that we see or seem is just a dream within a dream" (E. A. Poe)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 22 Mar 2002 - 17:02:55 CET

search this site