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
- Agresywnie usuń podciąg zaczynający się od
w
z ciągu źródłowego - 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
- Usuń
w
z ciągu źródłowego - Porównaj z ciągiem źródłowym
- Jeśli jest równe, to łańcuch źródłowy nie zaczyna się od drugiego łańcucha