Hallo, 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. 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). 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 ] gemailt werden, wo ja ein einfaches 'if Befehl' reichen wuerde... Ich vermute, dass so mancher if [ .. ] faelschlicherweise fuer zur Syntax von if .. then .. fi zugehoerig haelt... -dnh -- »Microsoft Outlook Express - Designed to enable Virus replication.« see http://www.microsoft.com/mac/products/office/2001/virus_alert.asp -- Sig stolen from Juergen P. Meier