Sprawdzanie, czy pierwszy ciąg zaczyna się od drugiego

JavaScript ma do tego funkcję:

"world".startsWith("w") true 

Jak mogę to przetestować za pomocą powłoki? Mam taki kod:

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

ale kończy się niepowodzeniem, ponieważ sprawdza równość. Wolałbym używać wbudowanego, ale wszystkie narzędzia z tej strony byłyby dopuszczalne:

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

Odpowiedź

Jeśli twoja powłoka to bash: w podwójnych nawiasach, prawa strona operatora == to wzorzec, chyba że jest w pełni cytowany:

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

Lub bardziej zwięźle: [[ world == w* ]] && echo true || echo false [*]

Jeśli nie kierujesz się konkretnie na bash: użyj instrukcji case do dopasowania wzorca

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

[*], ale musisz uważać na , ponieważ C zostanie wykonany, jeśli Błąd A lub Błąd B. Formularz if A; then B; else C; fi wykona tylko C, jeśli A zawiedzie.

Odpowiedź

set world 

Następnie:

if [ "${1%%w*}" ] then echo false else echo true fi 
  1. Agresywnie usuń podciąg zaczynający się od w z ciągu źródłowego
  2. Jeśli cokolwiek zostało, to ciąg źródłowy nie zaczyna się od drugiego ciągu

Lub:

if [ "$1" = "${1#w}" ] then echo false else echo true fi 
  1. Usuń w z ciągu źródłowego
  2. Porównaj z ciągiem źródłowym
  3. Jeśli jest równe, to łańcuch źródłowy nie zaczyna się od drugiego łańcucha

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *