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

Re: [gelöst]Re: /bin/sh: prüfen ob String1 "Wort" aus String2 enthält



On Sun, 1 Jan 2017 23:43:59 +0100
Michael Lange <klappnase@freenet.de> wrote:

> On Sun, 1 Jan 2017 20:33:00 +0100
> Jochen Spieker <ml@well-adjusted.de> wrote:

> > Doch, in der asymptotischen Betrachtung schon. :) Du baust den
> > String 
> > PKGS pro Paket neu (n mal) und dabei wird er immer länger. Der erste 
> > Paketname wird n-1 mal kopiert, der zweite n-2 und so weiter. Das ist
> > einfach ein schlechter Algorithmus. Die Laufzeit steigt
> > überproportional zur Länge der Paketliste. Sowas will man
> > grundsätzlich vermeiden.

Ist mir im Prinzip natürlich klar, der naheliegende Ansatz wäre eher,
nicht in INSTALLED_PKGS vorhandene Einträge aus PKGNAMES zu entfernen,
allerdings geht das mit der Shell selbst nicht (soweit ich weiss
zumindest), und eine Pipe mit sed oder so zu benutzen wird auch bei
relativ wenigen zu eliminierenden Paketen schnell sehr ineffizient.

Ich habe jetzt noch testweise mal ausprobiert, wie gross die Verzögerung
durch das wiederholte verändern von PKGS ist. Die for-Schleife lief
(sowohl in dash als auch bash) jew. ca. 10% schneller, wenn die
entspr. Zeile auskommentiert wird (die Schleife also durchläuft ohne
wirklich etwas zu tun). Zweifellos nicht schön, aber andererseits ist
performance-technisch wohl eher die Schleife an sich das Problem.

> Dann stellt sich aber wieder die Frage, was die posh an dem
> Codeschnipsel stört...

Ok, durch herumprobieren herausgefunden, die Anfühungzeichen um $p
entfernen und die Leerzeichen durch Backslash maskieren scheint die
Posix-konforme Variante zu sein:

for p in $PKGNAMES; do
    case " $INSTALLED_PKGS " in
        *\ $p\ *)
           PKGS="$PKGS $p";;
    esac
done

(falls jemand ein gutes Tutorial kennt, aus dem man solche Dinge lernen
kann, wäre ich dankbar für einen Link :)

Gruss

Michael


.-.. .. ...- .   .-.. --- -. --.   .- -. -..   .--. .-. --- ... .--. . .-.

Every living thing wants to survive.
		-- Spock, "The Ultimate Computer", stardate 4731.3


Reply to: