[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash; nur eine variablen zuweisung



On Mon, Nov 27, 2006 at 04:23:58PM +0100, Roland M. Kruggel wrote:
> Am Montag, 27. November 2006 16:16 schrieb Thorsten Haude:
> > * Roland M. Kruggel wrote (2006-11-27 16:05):
> > >Am Montag, 27. November 2006 15:59 schrieb Thorsten Haude:
> > >> Was ist das Ergebnis von
> > >>     foo=`tail -4 /var/log/auth.log`
> > >>     echo $foo >foo.out

Hier findet Word Splitting statt.  Ersetze
vielleicht einmal diese letzte Zeile oben durch:

echo "$foo" >foo.out

> > >>     cat foo.out
> > >
> > >Das gleiche. Keine Linefeeds
> >
> > Ok, bleibt noch
> >     tail -4 /var/log/auth.log > foo.out
> 
> Das tut's
> Wäre aber eine Krücke :)

Dabei findet kein Word Splitting statt.

> > >> Was sagt 'echo $IFS'?
> > >
> > >Ist ein Linefeed
> >
> > Nur und ausschließlich ein Linefeed? Default sind unter der Bash
> > Space, Tab und Linefeed
> 
> mail1:~# echo $IFS| hd
> 00000000  0a                                                |.|
> 00000001

Die Verwendung von hd ist ja eine super Idee.

Versuche mal

echo "$IFS" | hd

Und RTFM zu Word Splitting der bash.  Das ist eine
verwirrende Angelegenheit, wenn man nicht genau
weiß, was die bash da alles macht.  Insofern
wundert es mich jetzt, dass das LF (0a) hier noch
übrig bleibt.

Ach ne, ich habs:

Das von "echo $IFS" ausgegebene "0a" kommt nicht
aus dem Inhalt der Variablen IFS, sondern wird von
echo an die - in diesem Fall leere - Ausgabe
angehängt.  Also das "0a" bleibt nicht vom
Variableninhalt nach der Behandlung durch bash
übrig.

Dazu könntest du auch versuchen:

echo -n $IFS | hd

und

echo | hd

> > >> Hast Du es mit $() versucht?
> > >
> > >Da weis ich jetzt nicht was du meinst
> >
> > Du kannst statt Backticks auch $() benutzen, ich mag das lieber,
> > weil es deutlicher ist.
> >     foo=$(tail -4 /var/log/auth.log)
> 
> axo.
> Hat aber das gleich ergebniss

Das sollte es.  `...` ist bei der bash als
veraltend deklariert und wird durch $(...)
ersetzt. $() ist für Menschen leichter zu lesen
und zu verstehen, als ``, vor allem bei
Verschachtelungen, weil man Anfang und Ende des
Ausdruckes leichter erkennt, aber man muß dafür
leider ein Zeichen mehr eingeben.


Alles Gute
Helmut H. Franke

-- 
http://www.worte-des-lebens.net/Vaterworte/vaterworte.html
http://firethegrid.org/
http://www.anastasia-de.com/Megre_Buecher/Megre_Buecher.htm
http://itc.napier.ac.uk/e-Petition/bundestag/
Avatar Chat Systeme:  http://www.amiculi.net  http://pgm.amoris.org
Servamus vitam terramque!



Reply to: