Určení, zda první řetězec začíná druhým řetězcem

JavaScript má funkci:

"world".startsWith("w") true 

Jak to mohu otestovat pomocí shellu? Mám tento kód:

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

, ale selže, protože testuje rovnost. Raději bych použil vestavěný, ale jakékoli nástroje z této stránky by byly přijatelné:

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

Odpověď

Pokud je váš shell bash: v dvojitých závorkách je pravá strana operátoru == vzor, pokud není zcela citován:

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

Nebo stručněji: [[ world == w* ]] && echo true || echo false [*]

Pokud necílíte konkrétně na bash: použijte příkaz case pro porovnávání vzorů

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

[*], ale s A && B || C formulář, protože C bude spuštěn, pokud buď Selhání nebo B selhání. if A; then B; else C; fi formulář pouze provede C, pokud A selže.

Odpovědět

set world 

Potom:

if [ "${1%%w*}" ] then echo false else echo true fi 
  1. Agresivně odstraňte podřetězec začínající w ze zdrojového řetězce
  2. Pokud něco zbylo, zdrojový řetězec nezačíná druhým řetězcem

Nebo:

if [ "$1" = "${1#w}" ] then echo false else echo true fi 
  1. Odebrat w ze zdrojového řetězce
  2. Porovnat se zdrojovým řetězcem
  3. Je-li stejný, zdrojový řetězec nezačíná druhým řetězcem

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *