JavaScript tem uma função para isso:
"world".startsWith("w") true
Como posso testar isso com o shell? Eu tenho este código:
if [ world = w ] then echo true else echo false fi
mas ele falha porque está testando a igualdade. Eu preferiria usar um builtin, mas qualquer utilitário desta página seria aceitável:
http://pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html
Resposta
Se seu shell for bash: entre colchetes duplos, o lado direito do operador == é um padrão, a menos que seja totalmente citado:
if [[ world == w* ]]; then echo true else echo false fi
Ou mais concisamente: [[ world == w* ]] && echo true || echo false
[*]
Se você não está direcionando o bash especificamente: use a instrução case para correspondência de padrões
case "world" in w*) echo true ;; *) echo false ;; esac
[*] mas você precisa ter cuidado com o A && B || C
formulário porque C
será executado se A falha ou B falha. O if A; then B; else C; fi
formulário apenas executará C se A falhar.
Resposta
set world
Então:
if [ "${1%%w*}" ] then echo false else echo true fi
- Remova agressivamente substring começando com
w
da string de origem - Se sobrar alguma coisa, a string de origem não começa com a segunda string
Ou:
if [ "$1" = "${1#w}" ] then echo false else echo true fi
- Remova
w
da string de origem - Compare com a string de origem
- Se for igual, a string de origem não começa com a segunda string