Hallo liebe Liste Ich programmiere grade ein kleines Skript und habe da eine Stelle, wo ich nicht weiterkomme: if [ "$test" != [A-Z] ]; then $test="#"; fi In $test befindet sich jeweils der erste Char eines Strings (per cut ausgelesen), also A oder 4 oder %. Ich möchte nun testen, ob es sich nicht um einen Buchstaben aus A-Z handelt. Wenn es sich nicht um A-Z handelt, soll # in die Variable. Aber obiger Syntax führt nicht zum Erfolg. Hat da jemand einen Tip für mich? Dank im voraus Gruss Michael
Moin,
* Michael Rolli
Ich programmiere grade ein kleines Skript und habe da eine Stelle, wo ich nicht weiterkomme:
if [ "$test" != [A-Z] ]; then $test="#"; fi Wenn 'test' eine Variable ist, dann ist '$test' der Inhalt dieser Variable. Du mußt also 'then test="#"' benutzen.
Thorsten -- Don't let your sense of morals prevent you from doing what is right. - Isaac Asimov
Hallo Michael, * Michael Rolli schrieb am 21.Apr.2002: Erst mal zum Subjekt. Die bash selber kann kein regexp wie man es gewohnt ist. Dazu müßte man sed oder anderes aufrufen. Die bash kann nur das, was man auch bei der Dateierweiterung kennt, denn das ist schließlich auch die bash. Für die bash ist z.B . ein ganz normales Zeichen, wenn man davon absieht, daß es bei Dateien anders behandelt wird, wenn es das erste Zeichen ist. * steht für beliebig viele beliebige Zeichen und nicht für beliebig viele Zeichen des vorherigen Zeichens wie sonst bei regexp.
Ich programmiere grade ein kleines Skript und habe da eine Stelle, wo ich nicht weiterkomme:
if [ "$test" != [A-Z] ]; then $test="#"; fi
In $test befindet sich jeweils der erste Char eines Strings (per cut ausgelesen), also A oder 4 oder %. Ich möchte nun testen, ob es sich nicht um einen Buchstaben aus A-Z handelt. Wenn es sich nicht um A-Z handelt, soll # in die Variable. Aber obiger Syntax führt nicht zum Erfolg.
Was jetzt? Du sagst, in $test steht ein Sting. Wenn da zum Beispiel FOO drin steht, dann ist es aber ungleich [A-Z], da es aus mehr als ein Zeichen besteht. Was Du meinst ist wohl [A-Z]* Hierbei braucht nur das erste Zeichen aus der Menge A-Z zu sein, alle anderen Zeichen sind egal. a-z ist natürlich nicht eigeschlossen. Bernd -- Bei Fragen an die Liste erst mal nachschauen, ob es diese Frage nicht schon einmal gegeben hat. Ein Archiv der Liste findest Du auf: http://lists.suse.com/archives/suse-linux |Zufallssignatur 7
"Michael Rolli"
Ich möchte nun testen, ob es sich nicht um einen Buchstaben aus A-Z handelt. Wenn es sich nicht um A-Z handelt, soll # in die Variable.
Vorsicht, da ist noch ein Fallstrick verborgen, denn das funktioniert zuverlässig nur in der POSIX (oder C) locale, genauer, wenn LC_COLLATE=POSIX ist. NUr dann kommen Grossbuchstaben vor Kleinbuchstaben. In der deutschen Locale, also wenn LC_COLLATE=de_DE@euro o.Ä. gesetzt ist, gilt die deutsche lexikalische Sortier-Reihenfolge, und in der werden Kleinbuchstaben wie Grossbuchstaben behandelt. Um auch für solche Fälle gewappnet zu sein, sollte man die POSIX Zeichenklassen verwenden, also in deinem Fall z.B. [:lower:]. Näheres dazu siehe info '(bash.info.gz)Pattern Matching' Philipp
On Sun, 21 Apr 2002 at 15:55 (+0200), Philipp Thomas wrote:
Philipp Thomas
[ Son, 21 Apr 2002 15:39:03 +0200]: also in deinem Fall z.B. [:lower:].
Verd****, ich meinte latürnich [:upper:] :(
Das bringt es aber auch nicht wirklich. [:upper:] beinhaltet im Fall der de_DE-Umgebung auch die Umlaute. Gruß, Bernhard -- "Damn the torpedoes. Full speed ahead" -- Capt. David Farragut
Bernhard Walle [ 21.04.2002 16:58:25 +0200]:
Das bringt es aber auch nicht wirklich. [:upper:] beinhaltet im Fall der de_DE-Umgebung auch die Umlaute.
Und, wo ist das Problem? Es war nach Grossbuchstaben gefragt, und das leistet [:upper:] zuverlässig, währen [A-Z] einige Überraschung bereiten kann. Wenn man die Umlaute nicht möchte, wird es aber zugegebenermassen etwas schwieriger. Philipp
Hallo, On Mon, 22 Apr 2002 at 00:01 (+0200), Philipp Thomas wrote:
Bernhard Walle [ 21.04.2002 16:58:25 +0200]:
Das bringt es aber auch nicht wirklich. [:upper:] beinhaltet im Fall der de_DE-Umgebung auch die Umlaute.
Und, wo ist das Problem? Es war nach Grossbuchstaben gefragt, und das leistet [:upper:] zuverlässig, währen [A-Z] einige Überraschung bereiten kann.
Schon, aber wenn man [A-Z] schreibt, denkt man eigentlich an [ABCDEFGHIJKLMNOPQRSTUVWXYZ]; so geht es mir zumindest. So ist es z. B. auch in Perl -- auch mit "use locale;".
Wenn man die Umlaute nicht möchte, wird es aber zugegebenermassen etwas schwieriger.
Ich würde einfach [ABCDEFGHIJKLMNOPQRSTUVWXYZ] aussreiben, das geht sicher, schaut zwar nicht so toll aus aber was soll's. *g* Gruß, Bernhard -- Konfuzius sprach: "Listige Worte koennen die Tugend ruinieren. Kleine Ungeduldigkeiten koennen grosse Plaene ruinieren."
participants (5)
-
B.Brodesser@t-online.de
-
Bernhard Walle
-
Michael Rolli
-
Philipp Thomas
-
Thorsten Haude