Eu quero ver se uma string está dentro de uma parte de outra string.
por exemplo:
'ab' in 'abc' -> true
'ab' in 'bcd' -> false
Como posso fazer isso na condição de um script bash?
command-line
bash
scripts
Lucio
fonte
fonte
echo
declarações. Porque eu receboab is not in abc
ab was found in abc
, mas se eu usar,substring=z
eu ganhoz was found in abc
ab is not in abc
. Masz was found in abc
. Isso é engraçado: D[[ "bcd" =~ "ab" ]]
[[ "abc" =~ "ab" ]]
os colchetes são para o teste e, como são colchetes duplos, podem ser feitos alguns testes extras
=~
.Então você pode usar este formulário algo como
Edit: corrigido "= ~", havia invertido.
fonte
fail
com estes parâmetros:var2="abcd"
[[ $string =~ $substring ]]
. Eu atualizei a resposta.Usando padrões de nome de arquivo bash (também conhecido como padrões "glob")
fonte
As duas abordagens a seguir funcionarão em qualquer ambiente compatível com POSIX, não apenas no bash:
Ambos os resultados acima:
O primeiro tem a vantagem de não gerar um
grep
processo separado .Observe que eu uso em
printf %s\\n "${foo}"
vez de,echo "${foo}"
porqueecho
pode ser modificado${foo}
se contiver barras invertidas.fonte
xrandr
nomes de monitores armazenados na variável. 1 e seja bem-vindo ao clube de rep de 1K :) #declaração de caso shell
Esta é a solução mais portátil, funcionará mesmo em conchas Bourne antigas e concha Korn
Exemplo de execução:
Observe que você não precisa usá-
echo
lo especificamenteexit 1
eexit 0
pode significar sucesso ou fracasso.O que poderíamos fazer também é criar uma função (que pode ser usada em scripts grandes, se necessário) com valores de retorno específicos (0 na partida, 1 na partida):
grep
Essa abordagem específica é útil com instruções if-else em
bash
. Também na maior parte portátilAWK
Pitão
Rubi
fonte
Cuidado com o
[[
e"
:Então, como o @glenn_jackman disse, mas lembre-se de que, se você envolver o segundo termo inteiro entre aspas duplas, ele mudará o teste para a correspondência literal .
Fonte: http://tldp.org/LDP/abs/html/comparison-ops.html
fonte
Semelhante à resposta de edwin, mas com portabilidade aprimorada para posix & ksh e um toque menos barulhento que o de Richard:
Resultado:
fonte