Cuando se usa if [ ... ]
, en realidad está usando la [
utilidad (que es igual test
pero requiere que el último argumento sea ]
).
[
no entiende ejecutar su función, espera cadenas. Afortunadamente, no es necesario utilizarlo [
aquí (al menos para la función):
if [ "$docheck" -eq 1 ] && notContainsElement "$fruit" "${blacklist[@]}"; then
...
fi
Tenga en cuenta que también estoy comprobando el número entero primero, para que podamos evitar llamar a la función si $docheck
no es 1.
Esto funciona porque if
toma un comando arbitrario y decide qué hacer desde el estado de salida de ese comando. Aquí usamos una [ ... ]
prueba junto con una llamada a su función, con &&
un intermedio, creando un comando compuesto. El estado de salida del comando compuesto sería verdadero si tanto la [ ... ]
prueba como la función devolvieran cero como sus estados de salida, indicando éxito.
Como una nota de estilo, que no tendría la prueba de funcionamiento si la matriz no no contiene el elemento, pero si, si lo hace contener el elemento, y luego
if [ "$docheck" -eq 1 ] && ! contains "$fruit" "${blacklist[@]}"; then ...
Tener una prueba de función un lío voluntad negativa a la lógica en los casos en que se haga quiere probar si la matriz contiene el elemento ( if ! notContainsElement ...
).