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: