Hallo, On Fri, 05 Apr 2002 at 09:32 (+0200), David Haller wrote:
On Fri, 05 Apr 2002, Bernhard Walle wrote:
On Fri, 05 Apr 2002 at 00:00 (+0200), David Haller wrote:
On Tue, 02 Apr 2002, Bernhard Walle wrote: [ls und test]
Befehl ja, aber beide sind bash-builtin und somit ist test auch kein eigenes Programm wie etwa grep.
Jein. test ist _AUCH_ ein builtin, ls (zumindest hier) nicht. [...]
Es kann uebrigens sein, dass SuSE irgendwo im Pfad einen symlink '[' auf /usr/bin/test angelegt hat...
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.
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?
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 , 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*. Gruß, Bernhard -- "Don't do tomorrow what you can do today." -- Anne-Marie Mahfouf