Determinar se a primeira string começa com a segunda string

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 
  1. Remova agressivamente substring começando com w da string de origem
  2. 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 
  1. Remova w da string de origem
  2. Compare com a string de origem
  3. Se for igual, a string de origem não começa com a segunda string

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *