Ao usar, if [ ... ]
você está realmente usando o [
utilitário (que é o mesmo que, test
mas requer que o último argumento seja ]
).
[
não entende para executar sua função, espera seqüências de caracteres. Felizmente, você não precisa usar [
nada aqui (pelo menos para a função):
if [ "$docheck" -eq 1 ] && notContainsElement "$fruit" "${blacklist[@]}"; then
...
fi
Observe que também estou verificando o número inteiro primeiro, para que possamos evitar chamar a função se $docheck
não for 1.
Isso funciona porque if
recebe um comando arbitrário e decide o que fazer a partir do status de saída desse comando. Aqui, usamos um [ ... ]
teste juntamente com uma chamada para sua função &&
, criando um comando composto. O status de saída do comando composto seria verdadeiro se o [ ... ]
teste e a função retornassem zero como status de saída, sinalizando sucesso.
Como uma nota de estilo, eu não teria o teste de função se a matriz não não contêm o elemento, mas se se faz contêm o elemento e, em seguida,
if [ "$docheck" -eq 1 ] && ! contains "$fruit" "${blacklist[@]}"; then ...
Ter um teste de função uma bagunça vontade negativa a lógica em casos onde você fazer quer testar se a matriz contém o elemento ( if ! notContainsElement ...
).