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