Bash: Wie funktioniert ein Stringvergleich mit einem Muster in einem Skript?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Versuche es mal if [ -z "${i/abc*}" ] ; then

... ${i/abc} löscht im den String alles, was auf abc passt, wenn das am Anfang stand, ist dann der String leer.

Mit [[ kenne ich mich leider nicht aus.

Vielen Dank. Wenn ich das -z weglasse, macht es genau das, was ich brauche. :D

0

Hinweis(e):

Die eckigen Klammern [ ] stellen einen Test-Befehl zur Verfügung, der als Resultat eine 0 oder 1 liefert. Der Vergleich an sich muß auch durch Leerzeichen von dem Klammern getrennt werden.

Der Operator "=" hat eine doppelte Funktion: Zuweisung oder Vergleich:

X=Y   # Zuweisung
X = Y # Vergleich

Außerdem ist der m.W. nur für Zeichenketten (bzw. Inhalte von Variablen) definiert; will man mit einer Zahlen-Konstanten vergleichen, wird der Operator "-eq" zum Einsatz. Analog für Größenvergleich "-lt", "-gt", ...

Aber auch hierbei ist das Leerzeichen signifikant!

Weil eigenständiger »Befehl« muß danach noch ein Semikolon folgen ... zumindest, wenn man den Ausdruck auf eine Zeile schreibt.

Wie so ein Vergleich korrekt auf eine Zeile geschrieben wird, erhält man einfach durch die folgende Eingabe im Terminal:

if
[ X = Y ]
then
echo gleich
else
echo ungleich
fi

Holt man sich dies Folge mit "Taste aufwärts" wieder hervor, sieht man

if [ X = Y ]; then echo gleich; else echo ungleich; fi

Man beachte die Semikolon! Und das Ergebnis! Siehe auxh:

if [ $X = $Y ]; then echo gleich; else echo ungleich; fi

Außerdem sieht man eventuelle Fehler sofort!

Immer wieder hilfreich:

man bash

oder, falls installiert:... und entsprechende Info vorhanden:

info bash


Woher ich das weiß:Eigene Erfahrung – Intensive Beschäftigung hiermit seit etlichen Jahren

bei Perl würde es heissen: if ($i =~ /^abc/) :)

Danke. Mit Perl muss ich für diese Klausur auch arbeiten können. Dann stehe ich mit Sicherheit bei irgendeiner Übung auch mal vor diesem Problem.

0

Was möchtest Du wissen?