Hallo, On Fri, 05 Apr 2002, Bernhard Walle wrote:
On Fri, 05 Apr 2002 at 09:32 (+0200), David Haller wrote:
On Fri, 05 Apr 2002, Bernhard Walle wrote:
Richtig. Und damit ist sowohl test als auch [ _auch_ ein Builtin. Wo ist also der Unterschied? Dass [ nur ein symbolischer Link ist und test eine Binärdatei?
Der Unterschied ist primaer die Ausfuehrungsgeschwindigkeit: beim builtin muss kein neuer Prozess gestartet werden.
Schon klar. Das war ja nicht die Frage, ich wollte nur anmerken, dass es sich sowohl bei [ als auch bei test um beides -- ein Builtin und ein externes Programm -- handelt.
Achso, klar, [ und test als builtin sind das gleiche, bei test und [ als externes Programm ist eins halt ein binary ist, das andere ein (sym)link.
Andererseits funktioniert /usr/bin/test mit jeder shell (z.B. csh, zsh, ksh, perlsh...), ein [ nur, wenn auch der symlink gelegt ist (was bei mir z.B. nicht der Fall ist).
Sind das bei Dir noch die Originalpakete?
Aeh, ja (sh_utils-1.16), ich weiss aber grad nicht mehr wo ich das mit dem symlink [ gesehen habe...
Ausserdem finde _ich_ 'if test ....' lesbarer/weniger irritierend als ein 'if [ ... ]'. Ich vermute uebrigens, das das auch ein Grund ist, warum hier so gerne so ueberfluessige Konstrukte wie:
Befehl if [ $? = 0 ]
Kann gut sein. Man ist es halt gewohnt, in anderen Programmiersprachen nach dem if ein Paar (runder) Klammern zu setzen, also macht man es auch in der Shellprorammierung. Andererseits finde ich
if [ $? = 0 ] ; then
lesbarer als
if test $? = 0 ; then ,
Klar, letzteres ist ja auch in praktisch allen Faellen ueberfluessig. Wenn man den exitstatus eines befehls mehrfach braucht, dann sollte man sowieso eine (benannte) Variable verwenden. Ansonsten ja eben if Befehl; then und nicht den Test $? -eq 0 (oder "$?" = "0") (siehe 'help test', '=' ist ein string und keine arithmetischer Vergleich).
eben u. a. aus dem o. g. Grund. Andererseits ... Naja, man kann es ewig diskutieren und wird nie zu einem Ende kommen. Zugegeben, ich habe damit angefangen *duck*.
Hehe: noch was ganz anderes: In vielen Faellen kann man ja auch: Befehl && nochn_Befehl || Fehlermeldung verwenden, statt if Befehl; then nochn_Befehl; else Fehlermeldung; fi *g* -dnh -- Flhacs wird im Usenet grundsätzlich alsfhc geschrieben. Schreibt man lafhsc nicht slfach, so ist das schlichtweg hclafs. (Hajo Pflueger in de.newuser.questions)