Re: punkte zählen

2006-02-25 Diskussionsfäden Juergen Christoffel
On Wed, Feb 22, 2006 at 04:46:47PM +, Joerg Sommer wrote:
 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.

Guter Hinweis, danke. Das zeigt, das schnell getippte Beispiele noch lange
kein guter Code sind. In Produktionsscripts nutze ich auch entweder

OFS=$IFS
IFS=.
A=(a.b.c)
IFS=$OFS

oder schreibe aufwendigere Sachen direkt in Perl, weil Larry Wall zurecht
mal bemerkte It is easier to port a shell than a shell script.

--jc

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


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-22 Diskussionsfäden Joerg Sommer
Hallo Juergen,

sorry für die Verzögerung. Das Semester geht zu Ende und da wird es immer
nochmal stressig, aber ich wollte denoch ein paar Kommentare zu dem Thema
noch abgeben.

Juergen Christoffel [EMAIL PROTECTED] wrote:
 On Tue, Feb 14, 2006 at 05:51:10PM +, Joerg Sommer wrote:
 Juergen Christoffel [EMAIL PROTECTED] wrote:
 Warum ist ein Primzahltest kein besonders guter Test fuer eine Shell? Eine
 Shell ist ein Kommando-Interpreter, der im wesentlichen Eingaben
 analysiert, die resultierenden externen Kommandos aufruft, auf deren Ende
 wartet und dann das Ergebnis praesentiert bzw. intern abspeichert.

So viel Arithmetik steckt in dem Skript ja gar nicht drin. Vielmehr ist
es Auftrennen und Zusammenfügen von Zeichenketten und der Aufruf von
[ aka test. Durch die Schleifen hat man aber ein Massenweise
interpretieren der Anweisungen, sprich du testest damit wie gut der
Parser ist.

 Was waere ein guter Test? Da die meisten Shellscripts externe Kommandos
 aufrufen (selbst ein [...] ruft ja /bin/test auf) und auf die warten,
 haengt die Performance eines Scripts nicht unwesentlich von diesen
 Kommandos ab. Da Shellscripte eben eine Mischung aus interner Verarbeitung
 und externen Kommandos sind, ist es schwer, nur die Shell selbst zu testen.

Folgendes zeigt aber, dass keine externen Programme bei dem Skript
verwendet werden:
% dash -c 'set 1000; times; . archiv/programmieren/prim.sh /dev/null;times'
0m0.00s 0m0.00s
0m0.00s 0m0.00s
0m0.45s 0m0.00s
0m0.00s 0m0.00s
% bash -c 'set 1000; times; . archiv/programmieren/prim.sh /dev/null;times'
0m0.016s 0m0.004s
0m0.000s 0m0.000s
0m1.764s 0m0.044s
0m0.000s 0m0.000s

test ist bei wahrscheinlich allen Shells direkt implementiert. (bei dash,
posh und bash auf alle Fälle)

 Und selbst wenn eine andere Shell schneller als die zsh waere, die ich
 benutze, waere mir in der interaktiven Benutzung der Komfort z.B. der
 Completion oder der mehrzeiligen History-Edits wichtiger.

ACK. Aber das wollte ich damit auch nicht sagen. Für die interaktive
Benutzung ist es egal, ob das Skript 0.5 Sekunden oder 1.5 Sekunden
braucht. Aber in (fast) jedem Skript steht /bin/sh als Interpreter drin.
Daher sollte /bin/sh nicht eine Bash, sondern eine Dash sein. Denn ob
/etc/init.d/rc 1 Sekunde oder vielleicht 8 Sekunden braucht, fällt dann
schon ins Gewicht.

Schöne Grüße, Jörg.
-- 
Ein Mensch sieht ein und das ist wichtig,
nichts ist ganz flach und nichts ganz richtig.
   (Eugen Roth)


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-22 Diskussionsfäden Joerg Sommer
Hallo Juergen,

Juergen Christoffel [EMAIL PROTECTED] wrote:
 On Tue, Feb 14, 2006 at 06:03:13PM +, 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
 [EMAIL PROTECTED] jc]$ A=foo.bar.baz
 [EMAIL PROTECTED] 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


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Shelltests (war Re: punkte zählen)

2006-02-16 Diskussionsfäden Andreas Loesch
Am Mittwoch, 15. Februar 2006 22:01 schrieb Juergen Christoffel:
 On Tue, Feb 14, 2006 at 05:51:10PM +, Joerg Sommer wrote:
  Nicht? Was wäre dann ein geeigneter Test?

 Warum ist ein Primzahltest kein besonders guter Test fuer eine Shell?
 Eine Shell ist ein Kommando-Interpreter, der im wesentlichen Eingaben
 analysiert, die resultierenden externen Kommandos aufruft, auf deren
 Ende wartet und dann das Ergebnis praesentiert bzw. intern
 abspeichert. 
[...]
 Da Shellscripte eben eine Mischung aus
 interner Verarbeitung und externen Kommandos sind, ist es schwer, nur
 die Shell selbst zu testen. Und es entspraeche auch nicht unbedingt
 den realen Anwendungen.

die Befehlsanalyse sollte sich aber in weiten Teilen auf entsprechende 
Zeichenkettenfunktionen zurückführen lassen, insbesondere Zerlegung und 
Expansion (zusätzlich zu den externen Programmen).

 Was waere ein guter Test? Da die meisten Shellscripts externe
 Kommandos aufrufen (selbst ein [...] ruft ja /bin/test auf) und auf
 die warten,  

wobei das doch jetzt wieder Unterschiede zwischen verschiedenen Shells 
mitsich bringen kann :) zumindest man bash sagt z.B. dass test und 
[ expr ] builtin commands sind (das mag in POSIX nicht so sein ;) ) 
aber unter diesen Prämissen kann man auch nicht mehr alles auf das 
Warten abschieben.

Gruß Andreas



Re: punkte zählen

2006-02-15 Diskussionsfäden Juergen Christoffel
On Tue, Feb 14, 2006 at 05:51:10PM +, Joerg Sommer wrote:
 Juergen Christoffel [EMAIL PROTECTED] wrote:
  Du willst nicht ernsthaft die Geschwindigkeit zweier Kommando-Interpreter
  anhand einer Primzahl-Berechnung vergleichen...
 
 Nicht? Was wäre dann ein geeigneter Test?

Gute Frage und schwer zu beantworten, denn es ist leichter zu zeigen, dass
Primzahlen kein guter Test sind, als einen guten Test anzugeben. Das ist
wie mit dem Kochen, auch da ist es leichter ein angebranntes Gericht zu
erkennen als ein gutes zu kochen ;-)

Warum ist ein Primzahltest kein besonders guter Test fuer eine Shell? Eine
Shell ist ein Kommando-Interpreter, der im wesentlichen Eingaben
analysiert, die resultierenden externen Kommandos aufruft, auf deren Ende
wartet und dann das Ergebnis praesentiert bzw. intern abspeichert. Das
koennte eine Shell selbst dann noch gut und flott, wenn sie mit
BCD-Arithmetik oder verketteten Listen aus Ziffern arbeiten wuerde.

Da Shells, im Gegensatz zu Fortran oder C nicht primaer fuer Arithemtik
entworfen wurden, wissen wir nicht, ob die interne Arithmetik auch nur
halbwegs auf Geschwindigkeit hin ausgelegt ist.

Was waere ein guter Test? Da die meisten Shellscripts externe Kommandos
aufrufen (selbst ein [...] ruft ja /bin/test auf) und auf die warten,
haengt die Performance eines Scripts nicht unwesentlich von diesen
Kommandos ab. Da Shellscripte eben eine Mischung aus interner Verarbeitung
und externen Kommandos sind, ist es schwer, nur die Shell selbst zu testen.
Und es entspraeche auch nicht unbedingt den realen Anwendungen.

Und selbst wenn eine andere Shell schneller als die zsh waere, die ich
benutze, waere mir in der interaktiven Benutzung der Komfort z.B. der
Completion oder der mehrzeiligen History-Edits wichtiger. Denn wenn es
zeitkritisch wird, steige ich sowieso auf andere Sprachen um :-)

--jc

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


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-14 Diskussionsfäden Joerg Sommer
Hallo Juergen,

Juergen Christoffel [EMAIL PROTECTED] wrote:
 On Mon, Feb 13, 2006 at 04:00:35PM +0100, Andreas Loesch wrote:
 man beachte den Smily :) das kann natürlich bei mir auch an weniger 
 guten Shell-Fähigkeiten liegen, aber bei komplexeren Problemen, bei 
 denen die Geschwindigkeitsunterschiede dann relevant werden, kann ich 
 z.B. mit perl auch deutlich eleganter programmieren (OK, obs dann 
 schneller ist steht auf einem anderen Blatt aber es ist für mich 
 schöner)...

 In der Regel wird's schneller sein, denn die Shells interpretieren jede

Hab ich auch mal gedacht. Es gab mal ein Wörterbuch steak, dass voll mit
Shell und Shell-Mitteln (grep, sed, ...) gearbeitet hat. Ich hab
geglaubt, dass man das in Perl wesentlich schneller hinbekommt, aber nix.
Ich hab nur mit Müh und Not und einigen sehr merkwürden Sachen die Zeiten
erreicht, die die Shell mit fork() und allen Tools zugebracht hat.

Schöne Grüße, Jörg.
-- 
Wenn unser Hirn so einfach wäre, dass es sich selbst
begreifen könnte, dann könnte es sich selbst nicht mehr
begreifen, weil es zu einfach wäre ;) Nur mal so als
philosophischer Denkanstoss...


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-14 Diskussionsfäden Joerg Sommer
Hallo Juergen,

Juergen Christoffel [EMAIL PROTECTED] wrote:
 On Fri, Feb 10, 2006 at 06:42:43PM +, Joerg Sommer wrote:
 Kompatibel ist die Bash, aber nicht gerade schnell
 
 $ /usr/bin/time -p bash prim.sh 1000

 Du willst nicht ernsthaft die Geschwindigkeit zweier Kommando-Interpreter
 anhand einer Primzahl-Berechnung vergleichen...

Nicht? Was wäre dann ein geeigneter Test?

Schöne Grüße, Jörg.
-- 
Der Mensch hat die Atombombe erfunden.
Keine Maus der Welt käme auf die Idee, eine Mausefalle zu konstruieren.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-14 Diskussionsfäden Joerg Sommer
Hallo Juergen,

Juergen Christoffel [EMAIL PROTECTED] wrote:
 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.

 Einmal eine klassische Bourne-Shell:

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

Das habe ich auch erwartet. Aber in dem anderen Fall sah der Befehl so aus:
IFS=. A=(foo.bar.baz)

Für mein Verständnis ist der zweite Teil (A=...) kein Kommando sondern
eine Variablenzuweisung. Die Shell wird also für die Zeile erst die
ganzen Expansionen ausführen und dann den Befehl auswerten. Dabei hat IFS
nicht den alten werden, da erst der Befehl den Wert umsetzt. Daher kann
meiner Meinung nach auch noch nicht der Trenner . bei der Zuweisung von A
greifen. Andernfalls müsste auch IFS=. set $A funktionieren, was es bei
mir nicht tut.

Schöne Grüße, Jörg.
-- 
Die am Lautesten reden, haben stets am wenigsten zu sagen.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-14 Diskussionsfäden Juergen Christoffel
On Tue, Feb 14, 2006 at 06:03:13PM +, 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. The value of name in the
  invoking shell is not affected. For example,

user=fred command

  will execute command with user set to fred. The -k flag causes arguments
  of the form name=value to be interpreted in this way anywhere in the
  argument list. Such names are sometimes called keyword parameters. If any
  arguments remain they are available as positional parameters $1, $2, 

Offensichtlich handhaben das die modernen Varianten der Bourne-Shell immer
noch so. Die Manpage der Bash sagt bei mir dazu:

  The environment for any simple command or function may be augmented
  temporarily by prefixing it with parameter assignments, as described
  above in PARAMETERS. These assignment statements affect only the
  environment seen by that command.

  If the -k option is set (see the set builtin command below), then all
  parameter assignments are placed in the environment for a command, not
  just those that precede the command name.

 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
[EMAIL PROTECTED] jc]$ A=foo.bar.baz
[EMAIL PROTECTED] jc]$ IFS=. set $A
bash: IFS=. set foo.bar.baz: command not found

--jc

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


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-13 Diskussionsfäden Juergen Christoffel
On Sat, Feb 11, 2006 at 09:34:40PM +, 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) 


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-13 Diskussionsfäden Juergen Christoffel
On Fri, Feb 10, 2006 at 06:42:43PM +, Joerg Sommer wrote:
 Kompatibel ist die Bash, aber nicht gerade schnell
 
 $ /usr/bin/time -p bash prim.sh 1000

Du willst nicht ernsthaft die Geschwindigkeit zweier Kommando-Interpreter
anhand einer Primzahl-Berechnung vergleichen...

--jc

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


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-13 Diskussionsfäden Joerg Sommer
Hallo Andreas,

Andreas Loesch [EMAIL PROTECTED] wrote:
 Kompatibel ist die Bash, aber nicht gerade schnell

 ok, bei einem Shellscript hat mich bisjetzt die Zeit noch nicht so 
 interessiert ... wenn es zu lange dauert, dann ist die Sprache 
 falsch :)

Ohje, nur weil eine Implementation mies ist, muss die Sprache doch nicht
falsch sein. Man kann mit Shell so schon gewisse Probleme lösen und ist
denoch wahnsinnig flexibel (das interpretiert) und portabel (da eine
Shell auf alles Unixsystemen vorliegt). Aber Shell hat auch ihre
Nachteile, ich will sie mal nicht zu hoch in den Himmel heben.

 Ah ja, ich hab match auch im Standard gefunden:

   The use of string arguments length, substr, index, or match
 produces unspecified results.


 danke, gut zu wissen :) welcher Standard? POSIX oder wo?

Posix 1003.2 von 2004.

Schöne Grüße, Jörg.
-- 
Hey, dad, you see how this man can twist his fingers? Amazing, isn't
it? No, son, not really. He's been using Emacs for ten years...


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-13 Diskussionsfäden Andreas Loesch
Moin,

Am Montag, 13. Februar 2006 02:01 schrieb Joerg Sommer:
 Andreas Loesch [EMAIL PROTECTED] wrote:
  ok, bei einem Shellscript hat mich bisjetzt die Zeit noch nicht so
  interessiert ... wenn es zu lange dauert, dann ist die Sprache
  falsch :)

 Ohje, nur weil eine Implementation mies ist, muss die Sprache doch
 nicht falsch sein. 


man beachte den Smily :) das kann natürlich bei mir auch an weniger 
guten Shell-Fähigkeiten liegen, aber bei komplexeren Problemen, bei 
denen die Geschwindigkeitsunterschiede dann relevant werden, kann ich 
z.B. mit perl auch deutlich eleganter programmieren (OK, obs dann 
schneller ist steht auf einem anderen Blatt aber es ist für mich 
schöner)...

Gruß Andreas



Re: punkte zählen

2006-02-13 Diskussionsfäden Juergen Christoffel
On Mon, Feb 13, 2006 at 04:00:35PM +0100, Andreas Loesch wrote:
 man beachte den Smily :) das kann natürlich bei mir auch an weniger 
 guten Shell-Fähigkeiten liegen, aber bei komplexeren Problemen, bei 
 denen die Geschwindigkeitsunterschiede dann relevant werden, kann ich 
 z.B. mit perl auch deutlich eleganter programmieren (OK, obs dann 
 schneller ist steht auf einem anderen Blatt aber es ist für mich 
 schöner)...

In der Regel wird's schneller sein, denn die Shells interpretieren jede
Zeile neu (was bei den ueblichen Anwendungsfaellen auch oft Sinn macht),
waehrend Perl alles erst einmal in Bytecode (genauer: einen Parsetree)
uebersetzt und den dann abarbeitet.

Es lohnt sich immer, da jeweils passende Werkzeug zu nutzen. Man hat ja
auch im real life sowohl Hammer, Zange als auch diverse Sorten
Schraubenzieher (ja, ich weiss; Dreher ;-) und nicht nur eines. Na ja,
zumindest die ohne zwei linke Haende ;-)

--jc

-- 
  Reality is that which, when you stop believing in it, does not go away.
-- Philip K. Dick


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-12 Diskussionsfäden Andreas Loesch
Hallo,

Am Freitag, 10. Februar 2006 19:42 schrieb Joerg Sommer:
 Richtig, bash ist eine Obermenge von Posix. Also kompatibel ist sie,
 aber wenn du Bash-Elemente wie Arrays oder [[]] verwendest, kannst du
 dein Skript nicht mehr mit anderen Shells verwenden. Für dich alleine
 stört das nicht, aber mir sind schon einige postinstall- oder
 init-Skript um die Ohren geflogen, weil /bin/sh bei mir nicht die
 Bash ist.

ist ein guter Hinweis :) gerade die Array-Geschichten nutze ich in 
Bash-Scripten recht gerne, damit kann man doch auch sehr elegant 
programmieren, gut zu mahr als einem works for me würde ich mich da 
nie auslassen...


 Die Spezifikation solltest du unter http://www.opengroup.org/ finden.

danke, da werde ich mal suchen.

 Kompatibel ist die Bash, aber nicht gerade schnell

ok, bei einem Shellscript hat mich bisjetzt die Zeit noch nicht so 
interessiert ... wenn es zu lange dauert, dann ist die Sprache 
falsch :)

 Ah ja, ich hab match auch im Standard gefunden:

   The use of string arguments length, substr, index, or match
 produces unspecified results.


danke, gut zu wissen :) welcher Standard? POSIX oder wo?

Andreas



Re: punkte zählen

2006-02-11 Diskussionsfäden Michael Müller

Juergen Christoffel schrieb:

Nochmal zur Bash: mittels IFS (siehe man bash) kann man die Strings in
einen Array aufspalten und dann dessen Elemente zaehlen:

  IFS=. A=(foo.bar.baz)
  echo $A | wc -w
  3


Hallo Jürgen,

das Verbiegen von IFS ist eine gefährliche Sache, weil du damit 
riskierst, dass verschiedene andere Skriptteile, die sich darauf 
verlassen, dass IFS dem Standard entspricht (whitespace), nicht mehr das 
gewünschte Ergebnis liefern! Also IFS sichern und anschließend 
zurücksetzen!!


Gruß
; Michael



Re: punkte zählen

2006-02-11 Diskussionsfäden Thomas Kaepernick
Am Thu, Feb 09, 2006 at 12:01:16AM +, schrieb Joerg Sommer:
 Hallo Roland,
 
 Roland M. Kruggel [EMAIL PROTECTED] wrote:
  Hallo Liste,
 
  ich muss einen filename mit der bash 'zerschneiden'
 
  das format ist
aa.name.txt
  oder
b.ccc.name.txt
 
  als resultat brauche ich in drei variablen 'aa', 'name' und 'txt' bzw. 
  'b.ccc', 'name' und 'txt'
 
 last=${var##*.}
 var=${var%.$last}
 middle=${var##*.}
 var=${var%.$middle}
 first=$var
 
Noch eine Möglichkeit:

cd zum_Verzeichnis_mit_den_Dateien/

IFS=.
for i in *; do
set -- $i
if [ $2 != name ]; then
echo $1.$2 $3 $4
else
echo $1 $2 $3
fi
done


 Schöne Grüße, Jörg.
Ebenfalls schöne Grüße Thomas


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-11 Diskussionsfäden Joerg Sommer
Hallo Michael,

Michael Müller [EMAIL PROTECTED] wrote:
 Juergen Christoffel schrieb:
 Nochmal zur Bash: mittels IFS (siehe man bash) kann man die Strings in
 einen Array aufspalten und dann dessen Elemente zaehlen:
 
   IFS=. A=(foo.bar.baz)
   echo $A | wc -w
   3

 Hallo Jürgen,

 das Verbiegen von IFS ist eine gefährliche Sache, weil du damit 
 riskierst, dass verschiedene andere Skriptteile, die sich darauf 
 verlassen, dass IFS dem Standard entspricht (whitespace), nicht mehr das 
 gewünschte Ergebnis liefern! Also IFS sichern und anschließend 
 zurücksetzen!!

Das sollte an dieser Stelle kein Problem sein, da IFS nur für diesen
einen Befehl verbogen wird. 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.

Schöne Grüße, Jörg.
-- 
Prof. in der Mathematikvorlesung zu einem vergessenen \phi in der
Gleichung: Klein-\phi macht auch Mist.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-10 Diskussionsfäden Andreas Loesch
Hallo Roland,

Am Mittwoch, 8. Februar 2006 22:25 schrieb Roland M. Kruggel:
 ich muss einen filename mit der bash 'zerschneiden'

 das format ist
   aa.name.txt
 oder
   b.ccc.name.txt

 als resultat brauche ich in drei variablen 'aa', 'name' und 'txt'
 bzw. 'b.ccc', 'name' und 'txt'

d.h. Die Struktur ist sehr einfach, 
WorteMitPunkten PUNKT NAME PUNKT SUFFIIX
durch diese letzte Struktur kannst Du das ja mit regulären Ausdrücken 
erschlagen.

 Mein erster versuch mit cut -d. -f ... schlug leider fehl. Ich muss
 z.b. die punkte zählen oder ...?

die Punkte zählen wäre der andere Weg, aber ich würde über die Struktur 
gehen (Stichwort: Substring extraction). Insbesondere ist bei cut das 
Problem, dass Du afaik nicht die letzten 2 Felder ausgeben kannst :
( hier wäre dann z.B. awk mit der Zählfähigkeit sinnvoller )

egal, hier mal ein Beispiel, wie man es rein mit Bash-Mitteln machen 
könnte. Als Beschreibung der Struktur sind die entsprechenden Regulären 
Ausdrücke drin: 

$ A=aa.name.txt
$ B=bb.ccc.name.txt

Suffix: das Wort nach dem letzten Punkt
$ echo $( expr match $A '.*\.\(.*\)' )
txt
$ echo $( expr match $B '.*\.\(.*\)' )
txt

Name das Wort nach dem vorletzen und vor dem letzten Punkt
$ echo $( expr match $A '.*\.\(.*\)\..*' )
name
$ echo $( expr match $B '.*\.\(.*\)\..*' )
name

erstes Wort alles bis zum vorletzen Punkt
$ echo $( expr match $A '\(.*\)\..*\..*' )
aa
$ echo $( expr match $B '\(.*\)\..*\..*' )
bb.ccc
$

statt dem echo dann halt ein  VAR=$( expr foo ) nutzen.

Gruß Andreas



Re: punkte zählen

2006-02-10 Diskussionsfäden Juergen Christoffel
On Fri, Feb 10, 2006 at 09:18:18AM +0100, Andreas Loesch wrote:
 egal, hier mal ein Beispiel, wie man es rein mit Bash-Mitteln machen 
 könnte. Als Beschreibung der Struktur sind die entsprechenden Regulären 
 Ausdrücke drin: 

Sorry dass ich widerspreche, aber $(expr ...) gilt nicht mehr als rein mit
Bash-Mitteln, da Du ja ein externes Programm zuhilfe nimmst.

Ganz in der Bash geht das trotzdem und sogar ohne Regexps:

F=foo.bar.baz
G=''

while [[ $G != $F ]] ; do
  G=${F%%.*}
  F=${F#*.}
  echo G=$G -- F=$F
done

Ausgabe ist:

G=foo -- F=bar.baz
G=bar -- F=baz
G=baz -- F=baz

Daraus jetzt die Anzahl Punkte im String herzuleiten, ueberlasse ich den
geneigten Lesern...

--jc

P.S. Eleganter geht das natuerlich in einer Zeile Perl, aber das ist dann
 ja auch nicht mehr reine Bash ;-)

  echo foo.bar.baz | perl -le 'print s/\.//g'
  2

Wie funktioniert das? Die in Perl eingebaute Substitution liefert als
Funktionswert die Anzahl der Ersetzungen zurueck, die dann ausgegeben wird.

-- 
  Der Achte Deutsche Perl-Workshop findet dieses Jahr vom 01.03. bis
  03.03. an der Ruhr-Uni Bochum statt, siehe www.perl-workshop.de


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-10 Diskussionsfäden Andreas Loesch
Am Freitag, 10. Februar 2006 13:16 schrieb Juergen Christoffel:
 On Fri, Feb 10, 2006 at 09:18:18AM +0100, Andreas Loesch wrote:
  egal, hier mal ein Beispiel, wie man es rein mit Bash-Mitteln
  machen könnte. Als Beschreibung der Struktur sind die
  entsprechenden Regulären Ausdrücke drin:

 Sorry dass ich widerspreche, aber $(expr ...) gilt nicht mehr als
 rein mit Bash-Mitteln, da Du ja ein externes Programm zuhilfe nimmst.

ja ok :) für expr als Teil der sh-utils fällt bei mir schon unter 
gehört zur Shell aber im Prinzip hast Du recht.


 Ganz in der Bash geht das trotzdem und sogar ohne Regexps:

jepp, Jörg hatte ja auch schon diese Variante gepostet...

Wir reden hier ja alle nur von der Bash, aber der Einsatz von expr 
müsste das doch auch für die Shells unter den großen Unixen fit 
machen, oder? so dass das als kompatible Variante evtl. noch 
interessant wäre.


Gruß Andreas



Re: punkte zählen

2006-02-10 Diskussionsfäden Juergen Christoffel
On Fri, Feb 10, 2006 at 01:33:53PM +0100, Andreas Loesch wrote:
 Wir reden hier ja alle nur von der Bash, aber der Einsatz von expr 
 müsste das doch auch für die Shells unter den großen Unixen fit 
 machen, oder? so dass das als kompatible Variante evtl. noch 
 interessant wäre.

Da bin ich mir nicht sicher. Es ist zwar lange her, aber ich erinnere mich
an ein Paper von Henry Spencer und Geoff Collyer (die Autoren von C News,
wer ist alt genug, um sich daran zu erinnern? ;-) in dem sie beschrieben,
wie schwer es ist, Shell-Scripte zu schreiben, die wirklich portabel sind. 

Und von Larry Wall stammt It is easier to port a shell than a shell
script. Das mag zu Beginn des 21. Jahrhunderts nicht mehr ganz so schwer
sein, aber IMHO schadet es nie, sich zu beschraenken.

Aber mit externen Hilfen geht's auch in einer Zeile:

  echo foo.bar.baz | sed -e 's/\./\n/g' | wc -l
  3

Nochmal zur Bash: mittels IFS (siehe man bash) kann man die Strings in
einen Array aufspalten und dann dessen Elemente zaehlen:

  IFS=. A=(foo.bar.baz)
  echo $A | wc -w
  3

--jc

P.S. Die Bash hat uebrigens auch ein expr eingebaut, siehe ((...)) aber da
  ist dann der Match-Operator nicht dabei.

P.S.S. bevor ich's vergessen: fuer interaktiven Gebrauch ist die zsh (aka
  Z-Shell) viel schoener als die Bash ;-) ;-)

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


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-10 Diskussionsfäden Joerg Sommer
Hallo Andreas,

Andreas Loesch [EMAIL PROTECTED] wrote:
 Am Freitag, 10. Februar 2006 13:16 schrieb Juergen Christoffel:
 On Fri, Feb 10, 2006 at 09:18:18AM +0100, Andreas Loesch wrote:

 Ganz in der Bash geht das trotzdem und sogar ohne Regexps:

 jepp, Jörg hatte ja auch schon diese Variante gepostet...

 Wir reden hier ja alle nur von der Bash,

Nein. Ich rede von Shell, genauer Posix Shell. Den Bash-Dialekt zu
verwenden erachte ich als hochgradig unportabel und die Bash ist
_langsam_.

 aber der Einsatz von expr müsste das doch auch für die Shells unter den
 großen Unixen fit machen, oder? so dass das als kompatible Variante
 evtl. noch interessant wäre.

Der Witz ist, dass die Variante mit expr portabler *seien könnte*, als
das Bash-Kram. Jedoch gibt es kein match für expr. Der korrekte
Ausdrück wäre: expr $A : '.*\.\(.*\)'

Schöne Grüße, Jörg.
-- 
Science is the game we play with God to find out what His rules are.


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-10 Diskussionsfäden Andreas Loesch
Am Freitag, 10. Februar 2006 15:14 schrieb Juergen Christoffel:
   In zweifelhaften Fällen entscheide man sich für das Richtige.
   -- Karl Kraus (1874-1936)

das ist ja das Schöne ;) es gibt immer viele Wege nach Rom.

Andreas



Re: punkte zählen

2006-02-10 Diskussionsfäden Andreas Loesch
Hallo Jörg,

Am Freitag, 10. Februar 2006 15:08 schrieb Joerg Sommer:
 Andreas Loesch [EMAIL PROTECTED] wrote:
  Wir reden hier ja alle nur von der Bash,

 Nein. Ich rede von Shell, 

OK, Roland hat von bash geredet :)

 genauer Posix Shell. Den Bash-Dialekt zu  
 verwenden erachte ich als hochgradig unportabel und die Bash ist
 _langsam_.

hmm, kann ich nicht beurteilen, aber man bash sagt
quote
Bash is intended to be a conformant implementation of the IEEE POSIX 
Shell and Tools specification (IEEE Working Group 1003.2).
/quote

gibt es irgendwo das IEEE-Posix Dokument im Netz? ich habe da noch 
ncihts gefunden und die Differenzen Bash - Posix wären mal 
interessant.
und Folgefrage, welche Linux-Shell wäre denn Deiner Meinung nach am 
Posix kompatibelsten

  aber der Einsatz von expr müsste das doch auch für die Shells unter
  den großen Unixen fit machen, oder? so dass das als kompatible
  Variante evtl. noch interessant wäre.

 Der Witz ist, dass die Variante mit expr portabler *seien könnte*,
 als das Bash-Kram. Jedoch gibt es kein match für expr. Der korrekte
 Ausdrück wäre: expr $A : '.*\.\(.*\)'

hmm, aber mein man expr sagt: 
   ZKETTE : REGEXP
  verankerte Mustererkennung von REGEXP in ZKETTE

   match ZKETTE REGEXP
  dasselbe wie ZEICHENKETTE : REGEXP

das kann natürlich sein, dass sich hier die GNU-Shellutils von den 
großen Verwandten unterscheiden...


Gruß Andreas



Re: punkte zählen

2006-02-10 Diskussionsfäden Andreas Loesch
Hallo Jörg,

Am Freitag, 10. Februar 2006 15:08 schrieb Joerg Sommer:
 Andreas Loesch [EMAIL PROTECTED] wrote:
  Wir reden hier ja alle nur von der Bash,

 Nein. Ich rede von Shell, 

OK, Roland hat von bash geredet :)

 genauer Posix Shell. Den Bash-Dialekt zu  
 verwenden erachte ich als hochgradig unportabel und die Bash ist
 _langsam_.

hmm, kann ich nicht beurteilen, aber man bash sagt
quote
Bash is intended to be a conformant implementation of the IEEE POSIX 
Shell and Tools specification (IEEE Working Group 1003.2).
/quote

gibt es irgendwo das IEEE-Posix Dokument im Netz? ich habe da noch 
ncihts gefunden und die Differenzen Bash - Posix wären mal 
interessant.
und Folgefrage, welche Linux-Shell wäre denn Deiner Meinung nach am 
Posix kompatibelsten

  aber der Einsatz von expr müsste das doch auch für die Shells unter
  den großen Unixen fit machen, oder? so dass das als kompatible
  Variante evtl. noch interessant wäre.

 Der Witz ist, dass die Variante mit expr portabler *seien könnte*,
 als das Bash-Kram. Jedoch gibt es kein match für expr. Der korrekte
 Ausdrück wäre: expr $A : '.*\.\(.*\)'

hmm, aber mein man expr sagt: 
   ZKETTE : REGEXP
  verankerte Mustererkennung von REGEXP in ZKETTE

   match ZKETTE REGEXP
  dasselbe wie ZEICHENKETTE : REGEXP

das kann natürlich sein, dass sich hier die GNU-Shellutils von den 
großen Verwandten unterscheiden...


Gruß Andreas



Re: punkte zählen

2006-02-10 Diskussionsfäden Joerg Sommer
Hallo Andreas,

Andreas Loesch [EMAIL PROTECTED] wrote:
 Am Freitag, 10. Februar 2006 15:08 schrieb Joerg Sommer:
 Andreas Loesch [EMAIL PROTECTED] wrote:

 genauer Posix Shell. Den Bash-Dialekt zu  
 verwenden erachte ich als hochgradig unportabel und die Bash ist
 _langsam_.

 hmm, kann ich nicht beurteilen, aber man bash sagt
 quote
 Bash is intended to be a conformant implementation of the IEEE POSIX 
 Shell and Tools specification (IEEE Working Group 1003.2).
 /quote

Richtig, bash ist eine Obermenge von Posix. Also kompatibel ist sie, aber
wenn du Bash-Elemente wie Arrays oder [[]] verwendest, kannst du dein
Skript nicht mehr mit anderen Shells verwenden. Für dich alleine stört
das nicht, aber mir sind schon einige postinstall- oder init-Skript um
die Ohren geflogen, weil /bin/sh bei mir nicht die Bash ist.

Die Spezifikation solltest du unter http://www.opengroup.org/ finden.

 und Folgefrage, welche Linux-Shell wäre denn Deiner Meinung nach am 
 Posix kompatibelsten

Kompatibel ist die Bash, aber nicht gerade schnell

$ /usr/bin/time -p bash prim.sh 1000
[...]
real 1.75
user 1.71
sys 0.02
$ /usr/bin/time -p dash prim.sh 1000
[...]
real 0.45
user 0.44
sys 0.00
$ cat prim.sh
#!/bin/sh

set -e

LAST=${1:-100}

primes=
i=1
while i=$(($i+1))  [ $i -le $LAST ]; do
for p in $primes; do
if [ $(( $i % $p )) -eq 0 ]; then
#   i=$(($i+1))
continue 2;
fi
done
primes=$primes $i
#i=$(($i+1))
done

echo 1 $primes

  aber der Einsatz von expr müsste das doch auch für die Shells unter
  den großen Unixen fit machen, oder? so dass das als kompatible
  Variante evtl. noch interessant wäre.

 Der Witz ist, dass die Variante mit expr portabler *seien könnte*,
 als das Bash-Kram. Jedoch gibt es kein match für expr. Der korrekte
 Ausdrück wäre: expr $A : '.*\.\(.*\)'

 hmm, aber mein man expr sagt: 
ZKETTE : REGEXP
   verankerte Mustererkennung von REGEXP in ZKETTE

match ZKETTE REGEXP
   dasselbe wie ZEICHENKETTE : REGEXP

Ah ja, ich hab match auch im Standard gefunden:

  The use of string arguments length, substr, index, or match produces
  unspecified results.

Schöne Grüße, Jörg.
-- 
Ein Optimist ist in der Regel ein Zeitgenosse, der ungenuegend informiert ist.
   (John B. Priestley)


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-09 Diskussionsfäden Matthias Houdek
Hallo Roland M. Kruggel, hallo auch an alle anderen

Am Donnerstag, 9. Februar 2006 08:12 schrieb Roland M. Kruggel:
 Am Donnerstag, 9. Februar 2006 01:01 schrieb Joerg Sommer:
  Hallo Roland,
 
  Roland M. Kruggel [EMAIL PROTECTED] wrote:
   Hallo Liste,
  
   ich muss einen filename mit der bash 'zerschneiden'
  
   das format ist
 aa.name.txt
   oder
 b.ccc.name.txt
  
   als resultat brauche ich in drei variablen 'aa', 'name' und 'txt'
   bzw. 'b.ccc', 'name' und 'txt'
 
  last=${var##*.}
  var=${var%.$last}
  middle=${var##*.}
  var=${var%.$middle}
  first=$var

 Auch gut. Nicht ganz so 'verwirrend' wie das von jens. Ich werde
 beide notieren.

 Kannst du mit noch bitte grundsätzlich die '##' und '%' kurz
 erklären?

Vgl. man bash (ziehmlich weit unten):

${Parameter##Muster} entfernt den längsten mit Muster übereinstimmenden 
Teil aus Parameter, beginnend vom Anfang von Parameter. Bei nur einer # 
wäre es der kürzeste übereinstimmende Teil (hier nur bis zum ersten 
Punkt). Joker können verwendet werden. 
*. wären hier also beliebige Zeichen, gefolgt von einem Punkt.

Mit dem % (bzw. %%) wird ab dem Ende von Parameter gesucht.

Ist das Muster eindeutig, ist es egal, ob man ein oder zwei Operatoren 
verwendet.

Ich persönlich finde die andere Lösung schöner (weil universeller durch 
die Verwendung von RegEx). Allerdings ist es auch immer wieder schön 
daran erinnert zu werden, welch mächtige Werkzeuge doch die Shell so 
enthält (und meist viel zu selten nutzt).

-- 
Gruß
MaxX

Bitte beachten: Diese Mailadresse nimmt nur Listenmails entgegen.
Für PM bitte den Empfänger gegen den Namen in der Sig tauschen.



Re: punkte zählen

2006-02-09 Diskussionsfäden Christian Schmidt
Hallo Roland,

Roland M. Kruggel, 08.02.2006 (d.m.y):

 das format ist
   aa.name.txt
 oder
   b.ccc.name.txt
 
 als resultat brauche ich in drei variablen 'aa', 'name' und 'txt' bzw. 
 'b.ccc', 'name' und 'txt'
 
 Mein erster versuch mit cut -d. -f ... schlug leider fehl. Ich muss 
 z.b. die punkte zählen oder ...?

Wenn Du awk anweist, den Punkt als Spaltentrennzeichen zu verwenden,
kannst Du die Dateinamen damit auch in die drei Teile $1, $2 und $3
zerlegen.

Gruss,
Christian Schmidt

-- 
Der Geist der Wahrheit und der Geist der Freiheit - dies sind die
Stützen der Gesellschaft.
-- Henrik Ibsen (Pseudonym: Bjarme, Brynjolf)


signature.asc
Description: Digital signature


Re: punkte zählen

2006-02-09 Diskussionsfäden Michael Müller

Christian Schmidt schrieb:

Hallo Roland,

Roland M. Kruggel, 08.02.2006 (d.m.y):



das format ist
 aa.name.txt
oder
 b.ccc.name.txt

als resultat brauche ich in drei variablen 'aa', 'name' und 'txt' bzw. 
'b.ccc', 'name' und 'txt'


Mein erster versuch mit cut -d. -f ... schlug leider fehl. Ich muss 
z.b. die punkte zählen oder ...?



Wenn Du awk anweist, den Punkt als Spaltentrennzeichen zu verwenden,
kannst Du die Dateinamen damit auch in die drei Teile $1, $2 und $3
zerlegen.

Gruss,
Christian Schmidt


Hallo Christian,

das ist nicht ganz richtig ...
mit awk -F. bekommst du im zweiten Falle nämlich vier Parameter.

Gruß
; Michael



Re: punkte zählen

2006-02-09 Diskussionsfäden Christian Schmidt
Hallo Michael,

Michael Müller, 09.02.2006 (d.m.y):

 Christian Schmidt schrieb:
 Hallo Roland,
 
 Roland M. Kruggel, 08.02.2006 (d.m.y):
 
 
 das format ist
  aa.name.txt
 oder
  b.ccc.name.txt
 
 als resultat brauche ich in drei variablen 'aa', 'name' und 'txt' bzw. 
 'b.ccc', 'name' und 'txt'
 
 Mein erster versuch mit cut -d. -f ... schlug leider fehl. Ich muss 
 z.b. die punkte zählen oder ...?
 
 
 Wenn Du awk anweist, den Punkt als Spaltentrennzeichen zu verwenden,
 kannst Du die Dateinamen damit auch in die drei Teile $1, $2 und $3
 zerlegen.
 
 Gruss,
 Christian Schmidt
 
 Hallo Christian,
 
 das ist nicht ganz richtig ...
 mit awk -F. bekommst du im zweiten Falle nämlich vier Parameter.

Klaro.
Ich habe heute wieder Probleme mit dem Bereich ganzer Zahlen groesser
als drei... ;-)

Gruss,
Christian Schmidt

-- 
Aus einer Schülerzeitung: Wir nehmen den Satz Die Hälfte der Lehrer taugt
nichts zurück und stellen hiermit fest: Die Hälfte der Lehrer taugt
etwas!


signature.asc
Description: Digital signature


Re: punkte zählen

2006-02-08 Diskussionsfäden jens wille
hallo roland!

Roland M. Kruggel [08.02.2006 22:25]:
 ich muss einen filename mit der bash 'zerschneiden'
 
 das format ist aa.name.txt oder b.ccc.name.txt
 
 als resultat brauche ich in drei variablen 'aa', 'name' und 'txt'
 bzw. 'b.ccc', 'name' und 'txt'
spricht etwas gegen sed?

$ eval a=($(echo $filename | sed
's/\(.\+\)\.\([^.]\+\)\.\([^.]\+\)$/\1 \2 \3/'))

dann hast du im array a deine drei bestandteile:

filename=aa.name.txt= a[0]=aa,a[1]=name, a[2]=txt
filename=b.ccc.name.txt = a[0]=b.ccc, a[1]=name, a[2]=txt

hth
jens


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-08 Diskussionsfäden Joerg Sommer
Hallo Roland,

Roland M. Kruggel [EMAIL PROTECTED] wrote:
 Hallo Liste,

 ich muss einen filename mit der bash 'zerschneiden'

 das format ist
   aa.name.txt
 oder
   b.ccc.name.txt

 als resultat brauche ich in drei variablen 'aa', 'name' und 'txt' bzw. 
 'b.ccc', 'name' und 'txt'

last=${var##*.}
var=${var%.$last}
middle=${var##*.}
var=${var%.$middle}
first=$var

Schöne Grüße, Jörg.
-- 
MCSE = Minesweeper Consultant  Solitaire Expert


-- 
Haeufig gestellte Fragen und Antworten (FAQ): 
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [EMAIL PROTECTED]
mit dem Subject unsubscribe. Probleme? Mail an [EMAIL PROTECTED] (engl)



Re: punkte zählen

2006-02-08 Diskussionsfäden Roland M. Kruggel
Am Mittwoch, 8. Februar 2006 23:02 schrieb jens wille:
 hallo roland!

 Roland M. Kruggel [08.02.2006 22:25]:
  ich muss einen filename mit der bash 'zerschneiden'
 
  das format ist aa.name.txt oder b.ccc.name.txt
 
  als resultat brauche ich in drei variablen 'aa', 'name' und 'txt'
  bzw. 'b.ccc', 'name' und 'txt'

 spricht etwas gegen sed?

 $ eval a=($(echo $filename | sed
 's/\(.\+\)\.\([^.]\+\)\.\([^.]\+\)$/\1 \2 \3/'))

 dann hast du im array a deine drei bestandteile:

 filename=aa.name.txt= a[0]=aa,a[1]=name, a[2]=txt
 filename=b.ccc.name.txt = a[0]=b.ccc, a[1]=name, a[2]=txt

Geil. thanks

-- 
cu

Roland Kruggel  mailto: [EMAIL PROTECTED]
System: Intel 3.2Ghz, Debian etch, 2.6.15, KDE 3.4



Re: punkte zählen

2006-02-08 Diskussionsfäden Roland M. Kruggel
Am Donnerstag, 9. Februar 2006 01:01 schrieb Joerg Sommer:
 Hallo Roland,

 Roland M. Kruggel [EMAIL PROTECTED] wrote:
  Hallo Liste,
 
  ich muss einen filename mit der bash 'zerschneiden'
 
  das format ist
aa.name.txt
  oder
b.ccc.name.txt
 
  als resultat brauche ich in drei variablen 'aa', 'name' und 'txt'
  bzw. 'b.ccc', 'name' und 'txt'

 last=${var##*.}
 var=${var%.$last}
 middle=${var##*.}
 var=${var%.$middle}
 first=$var

Auch gut. Nicht ganz so 'verwirrend' wie das von jens. Ich werde beide 
notieren.

Kannst du mit noch bitte grundsätzlich die '##' und '%' kurz erklären?


-- 
cu

Roland Kruggel  mailto: [EMAIL PROTECTED]
System: Intel 3.2Ghz, Debian etch, 2.6.15, KDE 3.4