JavaScript har en funktion för detta:
"world".startsWith("w") true
Hur kan jag testa detta med skal? Jag har den här koden:
if [ world = w ] then echo true else echo false fi
men den misslyckas eftersom den testar för jämlikhet. Jag föredrar att använda ett inbyggt, men alla verktyg från den här sidan skulle vara acceptabla:
http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
Svar
Om ditt skal är bash: inom dubbla parenteser är den högra sidan av operatorn == ett mönster såvida det inte är helt citerat:
if [[ world == w* ]]; then echo true else echo false fi
Eller mer tämligen: [[ world == w* ]] && echo true || echo false
[*]
Om du inte riktar in dig på bash specifikt: använd ärendet för mönstermatchning
case "world" in w*) echo true ;; *) echo false ;; esac
[*] men du måste vara försiktig med A && B || C
form eftersom C
kommer att köras om antingen A misslyckas eller B misslyckas. if A; then B; else C; fi
-formuläret endast kör C om A misslyckas.
Svar
set world
Sedan:
if [ "${1%%w*}" ] then echo false else echo true fi
- Ta bort substring aggressivt från och med
w
från källsträngen - Om något kvar, börjar källsträngen inte med andra strängen
Eller:
if [ "$1" = "${1#w}" ] then echo false else echo true fi
- Ta bort
w
från källsträngen - Jämför med källsträngen
- Om det är lika börjar källsträngen inte med andra strängen