[linux-l] bash: [[ vs. [

Ihno Krumreich ihno at lst.de
Fr Mai 16 07:19:47 CEST 2003


Zur historie...

  [ bzw. test ist ein eigenstaendiges Kommando

  ihno at uttenreuth:/usr/bin> ls -l test [
  lrwxrwxrwx    1 root     root            4 2002-09-28 17:16 [ -> test
  -rwxr-xr-x    1 root     root        16156 2002-09-09 22:05 test
  ihno at uttenreuth:/usr/bin> 

das es schon Ewigkeiten in UNIX/LINUX-Systemen gibt. Damit die
Shell-Scripte etwas schneller werden haben die meisten Shells
dieses Kommando als internes Kommando. Eigenschaften des Kommandos
siehe man test.

 [[ ist eine bash-Kommando. 

Will man portabel beliben muss man [ benutzen. Mit [[
haengt man an der bash.


On Thu, May 15, 2003 at 10:14:34PM +0200, Oswald Buddenhagen wrote:
> On Thu, May 15, 2003 at 09:28:14PM +0200, Steffen Dettmer wrote:
> > > $ if [[ $A == 1 && $B == 1 ]]; then echo beide; fi
> > 
> > Ahh, so geht das! Schreib meistens if [ $A = 1 -a $B = 1 ], ist
> > natürlich execve zu test.
> > 
> ist es nicht. bei shells mit [[ is auch [ ein builtin. im prinzip ist
> es bloß geschmackssache, was man nimmt. und wenn es portabel sein soll,
> dann muß es eh "[ $A = 1 ] && [ $B = 1 ]" sein.

man kann auch "[ $A = 1 -a $B = 1 ]" schreiben. 

Bei [ $A = 1 ] && [ $B = 1 ] wird zweimal das Komando test aufgerufen
und das Ergebnis durch die Shell mit und verknuepft.

Durch den "="-Operator werden Strings verglichen!
Will man einen arithmetrischen Vergleich muss
man

	[ $A -eq 1 -a $B -eq 1 ]

schreiben. Bei [ $A -eq 1 -a $B -eq 1 ] wird einmal das Kommando
test aufgerufen. Fruher war die zweite variante schneller, heute
sollte es keinen Unterschied mehr machen.

> 
> > Und zum Glück gibt's Perl.
> > 
> vom regen in die traufe ... :)
> zumindest syntaxmäßig übertreffen sich die beiden immer wieder ...

Perl versucht ja auch das beste aus sh, awk und und anderen Utilities zu
vereienen

Gruss

Ihno




Mehr Informationen über die Mailingliste linux-l