Re: punkte zählen
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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