PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell-Programmierung :: Vergleich zweier Zeichenketten



kl47
30.03.04, 15:05
Hallo,

ich würde in der bash gerne zwei Zeichenketten auf ihre Gleichheit überprüfen, hier ist das was ich schon habe:



function writefile()
{
local Array=$1

for ((i=0; i<${!2}; i++)); do
# Dieser Vergleich klappt nicht, liefert immer 'true'
if [ "$Array[$i]"="Titel" ]
then
eval "$Array[$i]"="Neuer Titel"
fi

eval echo "\${$Array[$i]}"
done
}



Habe schon in der Linux-Fibel (Programmierung der Bourne Again Shell) nachgeschaut, dort aber nichts gefunden.

Vielen Dank im Voraus ;)

Blackhawk
30.03.04, 15:20
Hallo,

ich würde in der bash gerne zwei Zeichenketten auf ihre Gleichheit überprüfen, hier ist das was ich schon habe:



function writefile()
{
local Array=$1

for ((i=0; i<${!2}; i++)); do
# Dieser Vergleich klappt nicht, liefert immer 'true'
if [ "$Array[$i]"="Titel" ]
then
eval "$Array[$i]"="Neuer Titel"
fi

eval echo "\${$Array[$i]}"
done
}



Habe schon in der Linux-Fibel (Programmierung der Bourne Again Shell) nachgeschaut, dort aber nichts gefunden.

Vielen Dank im Voraus ;)

Also in der BourneShell heisst es == zum Zeichenkettenvergleich.
Ich kann mir gar nicht vorstellen, dass das in deinem Bash-Buch nicht drin steht.
Ansonsten
man test ...

peschmae
30.03.04, 16:38
man test bringt das da :p


STRING1 = STRING2
the strings are equal


Ich würde mal leerschläge vor dem = und nach dem = einfügen. Dann gehts nämlich


if [ "$Array[$i]" = "Titel" ]


und wenn wir schon dabei sind:
1. Bash-Scripts gehören eigentlich ins Schwesterforum http://mrunix.de
2. Den finde ich äusserst gelungen: http://www.tldp.org/LDP/abs/html/

MfG Peschmä

kl47
31.03.04, 17:20
Na gut, das hat mir gefehlt. Die Leerzeichen warens... :-/

(Hmm, also bei "int_a=12" darf kein Leerzeichen und bei Vergleichen muss eins... :rolleyes: )