Bepalen of de eerste string begint met de tweede string

JavaScript heeft hiervoor een functie:

"world".startsWith("w") true 

Hoe kan ik dit testen met shell? Ik heb deze code:

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

maar het mislukt omdat het op gelijkheid test. Ik zou liever een ingebouwde versie gebruiken, maar alle hulpprogrammas van deze pagina zijn acceptabel:

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

Answer

Als je shell bash is: tussen dubbele haakjes, is de rechterkant van de == operator een patroon tenzij volledig geciteerd:

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

Of korter: [[ world == w* ]] && echo true || echo false [*]

Als u zich niet specifiek op bash richt: gebruik de case-instructie voor patroonovereenkomst

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

[*] maar u moet voorzichtig zijn met de A && B || C vorm omdat C wordt uitgevoerd als ofwel Een mislukt of B mislukt. Het if A; then B; else C; fi formulier zal alleen C uitvoeren als A mislukt.

Antwoord

set world 

Dan:

if [ "${1%%w*}" ] then echo false else echo true fi 
  1. Agressief subteken verwijderen beginnend met w van de brontekenreeks
  2. Als er iets overblijft, begint de brontekenreeks niet met de tweede reeks

Of:

if [ "$1" = "${1#w}" ] then echo false else echo true fi 
  1. Verwijder w uit brontekenreeks
  2. Vergelijk met brontekenreeks
  3. Indien gelijk, dan begint de brontekenreeks niet met de tweede tekenreeks

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *