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

Re: punkte zählen



On Sat, Feb 11, 2006 at 09:34:40PM +0000, Joerg Sommer wrote:
> Das sollte an dieser Stelle kein Problem sein, da IFS nur für diesen
> einen Befehl verbogen wird. 

Das sollte nicht nur, das ist an der Stelle kein Problem, weil es "works as
designed".

> Aber eigentlich wird eine Variablenzuweisung (A=...) auch nicht als
> Befehl angesehen. Eigentlich sollte es nicht funktionieren, aber es tut
> es -- ich weiß nicht warum. Vielleicht eine Spezialität der Bash.

Nein, keine "Spezialität der Bash" sondern eher ein ausbaubares Verständnis
der klassischen Bourne-Shells? ;-)

Eine Bourne-Shell beachtet IFS beim Parsen von mittels "read" gelesenem
Input, ebenso beim Parsen des Outputs einer "Command Substitution" (also
Backquotes bzw. $(...) in der modernen Form) und bei der Substitution von
Variablen. Und die rechte Seite bei Zuweisungen wird nach den Regeln der
Variablensubstitution ausgewertet.

Beispiele sind kein Beweis, aber trotzdem welche. Beide unter OSF/1 (bzw.
True64 UNIX, oder wie immer es jetzt gerade heisst), um Linux-Spezifika zu
vermeiden.

Einmal eine klassische Bourne-Shell:

  $ IFS=. A="foo.bar.baz"
  $ for w in $A ; do echo $w; done
  foo
  bar
  baz


Die POSIX-konforme Shell dort:

  /usr/bin/posix/sh
  $ IFS=. A="foo.bar.baz"
  $ for w in $A ; do echo $w; done
  foo
  bar
  baz

Die Manpage der Bourne-Shell meint:

  IFS The characters that are internal field separators (the characters
      that the shell uses during interpretation of spaces, see
      Interpretation of Spaces). The shell initially sets IFS to include
      the space, tab, and newline characters.

  Interpretation of Spaces

    After the shell performs variable and command substitution, it scans
    the results for internal field separators (those defined in the IFS
    shell variable, see Variables Used by the Shell). It splits the line
    into distinct words at each place it finds one of these characters.

POSIX mag da[1] etwas anderes zu sagen, aber wenn ich versuche
POSIX-Standards zu lesen, brauche ich anschliessend immer ein Aspirin und
bin meist nicht wirklich schlauer als vorher. ;-/

	--jc

[1] http://www.opengroup.org/onlinepubs/007908799/xcu/chap2.html#tag_001_006_005

-- 
  In zweifelhaften Fällen entscheide man sich für das Richtige.
	-- Karl Kraus (1874-1936) 



Reply to: