Phineas hat geschrieben:Gibt instr() nicht eine Position zurück, wenn was gefunden wurde?
Ich denke, dass der Hinweis auf instr() nur zur Information, nicht aber als Anforderung gemeint war. Zumindest scheint es fuer das konkrete Problem des Fragenden nur wichtig zu sein *ob* es ein Substring ist.
Kann man sich selber bauen:
Code: Alles auswählen
instr(){
local p="${1%${2}*}"
(( ${#p} != ${#1} )) && echo $(( ${#p} + 1 ))
}
# Test:
instr 1234567890 456
Danke! Ich find's ja immer gut, wenn noch ein bisschen ``rumgespielt' wird, nachdem das Problem geloest ist (was ja scheinbar der Fall ist).
Deinen Vorschlag muss ich ``nett'' finden ... wie alles was ich als Leistung schaetze, aber leider ausserhalb meiner Welt liegt (in diesem Fall, weil unportabeles Shellscripting). Das soll nicht abwertend verstanden werden. Ich find's super, dass du den Vorschlag gemacht hast, und ich finde ihn auch nicht uebel an sich (selbst wenn ich mich mit so Bashisms nicht auskenne). Insbesondere hast du mich damit aber motiviert auch eine (und zwar auf awk basierende) instr()-Implementierung in Form einer Shell-Funktion zu liefern:
Gibt nichts zurück, wenn nichts gefunden wurde.
Das ist leider oft unguenstig. Meist ist es besser einen invaliden Wert (hier z.B. 0) zurueck zuliefern, denn in der Shell ``verschwinden'' sonst manchmal Parameter.