Bestimmen, ob die erste Zeichenfolge mit der zweiten Zeichenfolge beginnt

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 
  1. Entfernen Sie den Teilstring aggressiv, beginnend mit w von der Quellzeichenfolge
  2. 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 
  1. Entfernen Sie w aus der Quellzeichenfolge
  2. Vergleichen Sie mit der Quellzeichenfolge
  3. Wenn gleich, beginnt die Quellzeichenfolge nicht mit der zweiten Zeichenfolge

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.