2010-11-02 9 views
13

Ich muss überprüfen, ob die Variable Wert der Zeichenfolge hat, die mit der angegebenen Teilzeichenfolge beginnt.KSH überprüfen, ob der String mit Teilzeichenfolge beginnt

In Python wäre es so etwas wie dieses:

foo = 'abcdef' 
if foo.startswith('abc'): 
    print 'Success' 

Was die deutlichste Art und Weise ist mit Teilzeichenfolge bar ob STRIG $foo beginnt in Ksh zu überprüfen?

Antwort

23

Es ist sehr einfach, aber sieht ein wenig seltsam:

if [[ "$foo" == abc* ]]; then ... 

Man würde, dass KSH annehmen würde, das Muster mit den Dateien im aktuellen Verzeichnis erweitern, sondern tut es Pattern-Matching. Sie benötigen jedoch die [[. Single [ wird nicht funktionieren. Die Anführungszeichen sind nicht unbedingt erforderlich, wenn in foo keine Leerzeichen vorhanden sind.

+0

In doppelten Klammern brauchen Sie die Anführungszeichen nicht, selbst wenn '$ foo' null oder nicht gesetzt ist. –

+0

Die Lösung sieht genau so aus, wie ich gesucht habe. Aber leider funktioniert es nicht in meinem ksh. Es sieht aus wie ksh88, ich vermute zu alt für solche Tricks. – z4y4ts

+0

Was ist, wenn '$ foo'" = "enthält? – user443854

6

Sie können auch Regex Matching tun:

if [[ $foo =~ ^abc ]] 

Für komplexere Muster, empfehle ich eine Variable anstatt, das Muster direkt im Test:

bar='^begin (abc|def|ghi)[^ ]* end$' 
if [[ $foo =~ $bar ]] 
17

auch:

foo='abcdef' 
pattern='abc*' 

case "$foo" in 
    $pattern) echo startswith ;; 
    *) echo otherwise ;; 
esac 
+0

+1 für portable Lösung –

+1

Sie benötigen die Interim-Variable sicherlich nicht. 'case $ foo in 'abc' *) echo ja ;; esac' – tripleee

+1

portable zurück zu solaris 9/bin/sh und @ tripleee's vereinfachung oben funktioniert – lamont

Verwandte Themen