Determinando se a primeira cadeia começa com a segunda cadeia

0

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 falha porque está testando a igualdade. Eu preferiria usar um builtin, mas quaisquer utilitários desta página seriam aceitáveis:

link

    
por Steven Penny 31.08.2018 / 04:36

2 respostas

1
set world

Então:

if [ "${1%%w*}" ]
then
  echo false
else
  echo true
fi
  1. Agressivamente, remova a substring começando com w da string de origem
  2. Se algo restar, a sequência de origem não será iniciada com a segunda sequência

Ou:

if [ "$1" = "${1#w}" ]
then
  echo false
else
  echo true
fi
  1. Remover w da string de origem
  2. Compare com a string de origem
  3. Se igual, a string de origem não inicia com a segunda string
por 31.08.2018 / 05:07
4

Se o seu shell é 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: [[ world == w* ]] && echo true || echo false [*]

Se você não está segmentando 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 formulário A && B || C porque C será executado se A falhar ou B falhar. A forma if A; then B; else C; fi irá somente executar C se A falhar.

    
por 31.08.2018 / 04:51

Tags