16 Stimmen

KSH prüft, ob eine Zeichenkette mit einem Teilstring beginnt

Ich muss prüfen, ob die Variable den Wert einer Zeichenfolge hat, die mit der angegebenen Teilzeichenkette beginnt.

In Python würde es etwa so aussehen:

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

Wie kann man in Ksh am eindeutigsten prüfen, ob strig $foo beginnt mit Teilstring bar ?

27voto

Aaron Digulla Punkte 308693

Es ist sehr einfach, sieht aber ein bisschen seltsam aus:

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

Man würde annehmen, dass ksh das Muster mit den Dateien im aktuellen Verzeichnis erweitern würde, aber stattdessen führt es einen Mustervergleich durch. Sie benötigen die [[ Allerdings. Einzeln [ wird nicht funktionieren. Die Anführungszeichen sind nicht unbedingt erforderlich, wenn es keine Leerzeichen in foo .

17voto

glenn jackman Punkte 221248

Auch:

foo='abcdef'
pattern='abc*'

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

6voto

Dennis Williamson Punkte 322329

Sie können auch einen Regex-Abgleich durchführen:

if [[ $foo =~ ^abc ]]

Bei komplexeren Mustern empfehle ich, eine Variable zu verwenden, anstatt das Muster direkt in den Test aufzunehmen:

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

0voto

Mark Affleck Punkte 11
#!/bin/ksh
case ${foo:0:3} in
    abc) echo success;;
      *) echo failure;;
esac

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X