Ajuda para um script simples
#!/bin/bash
array1=(
prova1
prova2
slack64
)
a="slack64"
b="ab"
if [ $a = $b ]
then
echo "$a = $b : a is equal to b"
else
echo "$a = $b: a is not equal to b"
fi
Este script simplesmente não funciona, eu quero um script que verifique se slack64 está presente em uma lista (eu uso uma matriz) e simplesmente me dê, yes está presente ou não. Não sei como comparar uma matriz com uma única variável.
array1
trabalho?Respostas:
Use um tipo diferente de matriz: em vez de uma matriz indexada por número inteiro, use uma matriz associativa; portanto, a chave (índice) é o que você procurará.
bash-4.0
ou posterior é necessário para isso.No exposto acima, nós realmente não nos importamos com os valores, eles precisam estar apenas vazios para isso. Você pode "inverter" uma matriz indexada em uma nova matriz associativa trocando a chave e o valor:
Isso pode valer a pena se você tiver grandes matrizes que são frequentemente pesquisadas, pois a implementação de matrizes associativas terá um desempenho melhor do que os loops que atravessam a matriz. Porém, ele não serve para todos os casos de uso, pois não pode manipular duplicatas (embora você possa usar o valor como um contador, em vez de apenas 1 como acima), e não pode manipular um índice vazio.
Rompendo a linha complexa acima, para explicar a "inversão":
fonte
A maneira direta é iterar com um loop:
fonte
[[ a == aaa ]]
é falso, mas uma correspondência aaa não?[ ]
: classe de personagem (bolhas)[[ ]]
para o que você disse. Você já testou?Com
zsh
:fonte
Esta função trabalha com matrizes associativas.
Podemos usar esta função para executar um dos seguintes procedimentos:
- verifique se a matriz possui uma determinada chave -----------------> inArray "myKey" $ {! myArray [@]} "
- verifique se a matriz contém um determinado valor ---------> inArray "myValue" "$ {myArray [@]}"
fonte
Você também pode usar o grep para isso:
fonte
$a
e não comece com-
como você esqueceu a--
). Você pode usar em%s\0
vez de%s\n
e usargrep --null
(assumindo GNU grep ou compatível), pois as variáveis bash não podem conter o caractere NUL de qualquer maneira. Você também precisaria lidar especialmente com o caso de uma matriz vazia (pois esse comando printf imprimiria a mesma coisa que uma matriz com um elemento vazio). Observe também que você não precisa iniciar um subshell aqui.