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
- Agressief subteken verwijderen beginnend met
w
van de brontekenreeks - Als er iets overblijft, begint de brontekenreeks niet met de tweede reeks
Of:
if [ "$1" = "${1#w}" ] then echo false else echo true fi
- Verwijder
w
uit brontekenreeks - Vergelijk met brontekenreeks
- Indien gelijk, dan begint de brontekenreeks niet met de tweede tekenreeks