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

Re: punkte zählen



Hallo Andreas,

Andreas Loesch <andreas@loesch-online.de> wrote:
> Am Freitag, 10. Februar 2006 15:08 schrieb Joerg Sommer:
>> Andreas Loesch <debian@andreasloesch.de> 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)



Reply to: