Déterminer si la première chaîne commence par la deuxième chaîne

JavaScript a une fonction pour cela:

"world".startsWith("w") true 

Comment puis-je tester cela avec shell? Jai ce code:

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

mais il échoue car il teste légalité. Je préférerais utiliser un système intégré, mais tous les utilitaires de cette page seraient acceptables:

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

Réponse

Si votre shell est bash: entre crochets doubles, le côté droit de lopérateur == est un modèle à moins dêtre entièrement entre guillemets:

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

Ou plus brièvement: [[ world == w* ]] && echo true || echo false [*]

Si vous ne ciblez pas spécifiquement bash: utilisez linstruction case pour la correspondance de motifs

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

[*] mais vous devez faire attention avec A && B || C car C sera exécuté si soit A échoue ou B échoue. Le formulaire if A; then B; else C; fi nexécutera que C si A échoue.

Réponse

set world 

Ensuite:

if [ "${1%%w*}" ] then echo false else echo true fi 
  1. Supprimer de manière agressive la sous-chaîne commençant par w de la chaîne source
  2. Sil reste quelque chose, alors la chaîne source ne commence pas par la deuxième chaîne

Ou:

if [ "$1" = "${1#w}" ] then echo false else echo true fi 
  1. Supprimer w de la chaîne source
  2. Comparer avec la chaîne source
  3. Si égal, alors la chaîne source ne commence pas par la deuxième chaîne

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *