Bestemmelse af, om den første streng starter med anden streng

JavaScript har en funktion til dette:

"world".startsWith("w") true 

Hvordan kan jeg teste dette med shell? Jeg har denne kode:

if [ world = w ] then echo true else echo false fi 

men den mislykkes, fordi den tester for lighed. Jeg foretrækker at bruge et indbygget, men alle hjælpeprogrammer fra denne side vil være acceptable:

http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html

Svar

Hvis din shell er bash: inden for dobbelte parenteser, er højre side af operatoren == et mønster, medmindre det er fuldt citeret:

if [[ world == w* ]]; then echo true else echo false fi 

Eller mere forsigtigt: [[ world == w* ]] && echo true || echo false [*]

Hvis du ikke målretter mod bash specifikt: brug sagserklæringen til mønstermatchning

case "world" in w*) echo true ;; *) echo false ;; esac 

[*] men du skal være forsigtig med A && B || C form fordi C vil blive udført, hvis enten A mislykkes eller B mislykkes. if A; then B; else C; fi formularen kun udfører C, hvis A mislykkes.

Svar

set world 

Derefter:

if [ "${1%%w*}" ] then echo false else echo true fi 
  1. Fjern substrat aggressivt fra og med w fra kildestreng
  2. Hvis der er noget tilbage, starter kildestreng ikke med anden streng

Eller:

if [ "$1" = "${1#w}" ] then echo false else echo true fi 
  1. Fjern w fra kildestreng
  2. Sammenlign med kildestreng
  3. Hvis det er lige, starter kildestrengen ikke med anden streng

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *