Att avgöra om den första strängen börjar med den andra strängen

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 
  1. Ta bort substring aggressivt från och med w från källsträngen
  2. 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 
  1. Ta bort w från källsträngen
  2. Jämför med källsträngen
  3. Om det är lika börjar källsträngen inte med andra strängen

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *