Re: Shellscript-Frage

From: Oliver Fromme <olli(at)secnetix.de>
Date: Fri, 6 Dec 2002 22:08:16 +0100 (CET)

Matthias Fechner <idefix(at)fechner.net> wrote:
> * Oliver Fromme <olli(at)secnetix.de> [06-12-02 13:20]:
> > Das leichteste passende Werkzeug dürfte »tr« sein:
> > tr -s " "
>
> Ich muss gestehen, dass ich da nicht so richtig schlau draus werde in
> Perl würde ich einfach ($foo)=$foo=~s/\s+/\s/g;

Das nennst Du einfach? :-)

> schreiben, aber mit
> der sh habe ich so meine Probleme, habe jetzt mal folgendes versucht,
> aber offensichtlich mache ich was falsch.
>
> #!/bin/sh
> FOO="bla bla2 bla3"
> echo "$FOO"
> FOO=tr "$FOO" " "
> echo "$FOO"

Die vorletzte Zeile muß heißen:
FOO=$(echo "$FOO" | tr -s " ")

In Deiner Zeile würd eeinfach nur eine Stringzuordnung pas-
sieren (bzw. ein Syntax-Fehler). Mit $() wird dagegen ein
Shellkommando ausgeführt und die Ausgabe zugewiesen (man
kann auch Backticks (`) verwenden.)

Wie gesagt: Wenn Du den fraglichen String eh schon in ei-
ner Shell-Variablen stehen hast, kann man den Trick mit
»set« verwenden:

#!/bin/sh
FOO="bla bla2 bla3"
echo "$FOO"
set -- $FOO
FOO="$*"
echo "$FOO"

Gruß -- Olli

PS: Vielleicht solltest Du mal in einer ruhigen Minute die
sh(1) manpage von oben bis unten durchlesen. Und parallel
dazu in einem zweiten Terminal mit sh-Kommandos herumspie-
len.

PPS: Wenn Du eine interaktive sh (zum Testen und Spielen)
mit der Option -E startest (oder bei einer bereits laufen-
den sh »set -E« eingibst), kannst Du die Cursortasten zum
Editieren und Scrollen durch die Historie verwenden. Sehr
hilfreich, das.

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"All that we see or seem is just a dream within a dream" (E. A. Poe)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 06 Dec 2002 - 22:08:19 CET

search this site