JavaScript hat eine Funktion dafür:
"world".startsWith("w") true
Wie kann ich das mit Shell testen? Ich habe diesen Code:
if [ world = w ] then echo true else echo false fi
, aber er schlägt fehl, weil er auf Gleichheit prüft. Ich würde es vorziehen, ein eingebautes Programm zu verwenden, aber alle Dienstprogramme auf dieser Seite wären akzeptabel:
http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
Antwort
Wenn Ihre Shell bash ist: In doppelten Klammern befindet sich die rechte Seite des Operators == ein Muster, sofern es nicht vollständig zitiert ist:
if [[ world == w* ]]; then echo true else echo false fi
Oder genauer: [[ world == w* ]] && echo true || echo false
[*]
Wenn Sie nicht speziell auf Bash abzielen: Verwenden Sie die case-Anweisung für den Mustervergleich
case "world" in w*) echo true ;; *) echo false ;; esac
[*], aber Sie müssen mit der A && B || C
-Formular, da C
ausgeführt wird, wenn entweder A schlägt fehl oder B schlägt fehl. Das Formular if A; then B; else C; fi
führt nur C aus, wenn A fehlschlägt.
Antwort
set world
Dann:
if [ "${1%%w*}" ] then echo false else echo true fi
- Entfernen Sie den Teilstring aggressiv, beginnend mit
w
von der Quellzeichenfolge - Wenn noch etwas übrig ist, beginnt die Quellzeichenfolge nicht mit der zweiten Zeichenfolge
Oder:
if [ "$1" = "${1#w}" ] then echo false else echo true fi
- Entfernen Sie
w
aus der Quellzeichenfolge - Vergleichen Sie mit der Quellzeichenfolge
- Wenn gleich, beginnt die Quellzeichenfolge nicht mit der zweiten Zeichenfolge