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

Ihno Krumreich ihno at lst.de
Fr Mai 16 15:00:32 CEST 2003


On Fri, May 16, 2003 at 12:18:14PM +0200, Oswald Buddenhagen wrote:
> On Fri, May 16, 2003 at 07:19:47AM +0200, Ihno Krumreich wrote:
> > Will man portabel beliben muss man [ benutzen.
> >
> ja
> 
> > Mit [[ haengt man an der bash.
> > 
> ich würde darauf nicht wetten ... vermutlich kommt das von der ksh (wie
> so vieles in der bash). ich habe es auf jeden fall schon in ein paar
> anderen shells gesichtet.
> 
> > > und wenn es portabel sein soll,
> > > dann muß es eh "[ $A = 1 ] && [ $B = 1 ]" sein.
> > 
> > man kann auch "[ $A = 1 -a $B = 1 ]" schreiben. 
> > 
> kann man nicht. basta.
> zur portablen shell-programmierung empfehle ich ich ein studium der
> autoconf-info-page. vorsicht: kotztüte bereithalten.

Warum nicht?

- die shell beschwert sich nicht.
- die bash beschwert sich nicht.
- die ksh beschwert sich nicht.
- test beschwert sich nicht.

Da die autoconf-Seite zu den kleinen und uebersichtlichen gehoert
(das Inhaltverzeichnis hat 318 Zeilen) waere ein kurzer Hinweis
wo dazu was im autoconf steht nicht schlecht. "basta" ist da ein
schlechter Hinweis.

Ausserdem, wiese ist autoconf das Mass aller Dinge. Es soll auch
Leute geben die nicht mit autoconf arbeiten.....
> 
> > Durch den "="-Operator werden Strings verglichen! [...]
> >
> ach neee ... ;)
> s.u.
> 
> On Fri, May 16, 2003 at 08:09:45AM +0200, Jan-Benedict Glaw wrote:
> > > und wenn es portabel sein soll,
> > > dann muß es eh "[ $A = 1 ] && [ $B = 1 ]" sein.
> > 
> > Nur für's Protokoll - um $A und $B sollten jeweils Anführungsstriche
> > stehen. ...
> >
> ich spare an anführungszeichen wo es nur geht. so lange die eingaben
> sich an die vorgaben halten, funzt das auch wunderbar. und wenn sie es
> nicht tun, sehe ich gleich, daß meine annahmen falsch waren und es
> vermutlich einen echten fehler gibt.
> im übrigen braucht man in folgenden fällen keine anführungszeichen, egal
> was kommt:
> foo=$bar
> case $foo in ...

Das ist eine Frage des Geschmacks. Die Frage wie sorgfaeltig die die
Parameter geprueft werden und ob man die etwas groben Meldungen von der
Shell moechte und vielleicht eigene, besser formulierte.
> 
> > und dann gibt's da noch den kleinen, feinen Unterschied, daß einige
> > test's "=" und andere "==" wollen,
> >
> das halte ich für ein gerücht - dann würde ja gar nix mehr
> funktionieren. = ist korrekt. == ist eine extension, die von diversen
> shells "reingesaugt" wurde (um die dummen c-programmierer glücklich zu
> machen :).

Es ist die Frage was mal will. Verwendet man [[ und == dann werden die
Zeichenketten rechts und Links des == als regulaere Ausdruecke
begriffen. Keine Ahnung was das mit C-Programmierern zu tun hat.
Die Semantik von == und = ist in C eine voellig andere....


Ihno




Mehr Informationen über die Mailingliste linux-l