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

Re: punkte zählen



Hallo Juergen,

Juergen Christoffel <jc.debian@unser.net> wrote:
> On Tue, Feb 14, 2006 at 06:03:13PM +0000, Joerg Sommer wrote:
>> Für mein Verständnis ist der zweite Teil (A=...) kein Kommando sondern
>> eine Variablenzuweisung. 
>
> Die Shell verarbeitet nach dem Parsen und Expandieren einfach Listen von
> "commands". Und ein "command" kann sowohl eine Zuweisung als auch ein
> Aufruf wie "ls" sein. Eine Syntax der klassischen Bourne-Shell gibt's in
> einer klassischen Intro von Stephen Bourne selbst. Online z.B. unter
> http://steve-parker.org/sh/bourne.shtml
>
> Stephen Bourne sagt in dem Paper im Abschnitt "3.0 Keyword paramaters":
>
>   Shell variables may be given values by assignment or when a shell
>   procedure is invoked. An argument to a shell procedure of the form
>   name=value that precedes the command name causes value to be assigned to
>   name before execution of the procedure begins.

An der Stelle ist aber schon das Expandieren passiert. Das Zerlegen
von a.b.c an den Punkten passiert also nicht durch die Shell. Oder
doch. A=(a.b.c) ist nämlich kein Befehl, sondern eine
Variablenzuweisung und die werden einfach nacheinander ausgewertet:

$ echo -"$IFS"-
- 
-
$ IFS=. A=(a.b.c)         
$ echo -"$IFS"-
-.-

Das Verbiegen von IFS ist also nicht lokal für diese Zeile, da es
keinen Befehl gibt, auf den es sich beschränken könnte. Wow, diese
Zeile ist in meinen Augen hochgradig gefährlich, weil sie etwas
suggeriert, das aber in keinster Weise so ist.

>> greifen. Andernfalls müsste auch "IFS=. set $A" funktionieren, was es bei
>> mir nicht tut.
>
> In diesem Fall ist IFS=. ja kein Keyword-Parameter, sondern Bestandteil des
> Strings selbst. Und der evaluiert letzten Endes nicht zu einem gueltigen
> "command":
>
> lilith[1628]: bash
> [jc@lilith jc]$ A=foo.bar.baz
> [jc@lilith jc]$ "IFS=. set $A"

ich meinte $ IFS=. set foo.bar.baz

Dabei wird IFS nur lokal verbogen (IFS hat nach der Zeile den
gleichen Wert wie zuvor) und echo $@ liefert nicht wie erhofft
"foo bar baz".

Schöne Grüße, Jörg.
-- 
The social dynamics of the net are a direct consequence of the fact
that nobody has yet developed a Remote Strangulation Protocol.
         -- Larry Wall



Reply to: