Determinarea dacă primul șir începe cu al doilea șir

JavaScript are o funcție pentru aceasta:

"world".startsWith("w") true 

Cum pot testa acest lucru cu shell? Am acest cod:

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

dar eșuează deoarece testează egalitatea. Aș prefera să folosesc un program încorporat, dar orice utilitare din această pagină ar fi acceptabilă:

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

Răspuns

Dacă shell-ul dvs. este bash: între paranteze duble, partea dreaptă a operatorului == este un model dacă nu este complet citat:

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

Sau mai mult: [[ world == w* ]] && echo true || echo false [*]

Dacă nu vizați bash în mod specific: utilizați instrucțiunea de caz pentru potrivirea modelelor

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

[*], dar trebuie să aveți grijă cu A && B || C formular deoarece C va fi executat dacă fie A eșuează sau B eșuează. Formularul if A; then B; else C; fi va doar va executa C dacă A eșuează.

Răspunde

set world 

Apoi:

if [ "${1%%w*}" ] then echo false else echo true fi 
  1. Eliminați agresiv sub șirul începând cu w din șirul sursă
  2. Dacă mai rămâne ceva, șirul sursă nu începe cu al doilea șir

Sau:

if [ "$1" = "${1#w}" ] then echo false else echo true fi 
  1. Eliminați w din șirul sursă
  2. Comparați cu șirul sursă
  3. Dacă este egal, atunci șirul sursă nu începe cu al doilea șir

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *