Bestemme om den første strengen starter med den andre strengen

JavaScript har en funksjon for dette:

"world".startsWith("w") true 

Hvordan kan jeg teste dette med skall? Jeg har denne koden:

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

men den mislykkes fordi den tester for likhet. Jeg foretrekker å bruke et innebygd, men alle verktøy fra denne siden vil være akseptable:

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

Svar

Hvis skallet ditt er bash: innenfor doble parentes, er høyre side av == operatoren et mønster med mindre det er sitert fullt ut:

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

Eller mer forsiktig: [[ world == w* ]] && echo true || echo false [*]

Hvis du ikke målretter mot bash spesifikt: bruk saksuttalelsen for mønstermatching

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

[*] men du må være forsiktig med A && B || C form fordi C vil bli utført hvis enten A mislykkes eller B mislykkes. if A; then B; else C; fi -skjemaet vil bare utføre C hvis A mislykkes.

Svar

set world 

Deretter:

if [ "${1%%w*}" ] then echo false else echo true fi 
  1. Fjern substring aggressivt fra og med w fra kildestreng
  2. Hvis noe er igjen, starter ikke kildestreng med andre 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 likt, starter ikke kildestrengen med andre streng

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *