Bei der Verwendung verwenden if [ ... ]
Sie tatsächlich das [
Dienstprogramm (das das gleiche ist, test
aber erfordert, dass das letzte Argument lautet ]
).
[
versteht es nicht, Ihre Funktion auszuführen, es erwartet Zeichenfolgen. Zum Glück müssen Sie hier überhaupt nicht verwenden [
(zumindest für die Funktion):
if [ "$docheck" -eq 1 ] && notContainsElement "$fruit" "${blacklist[@]}"; then
...
fi
Beachten Sie, dass ich auch zuerst die Ganzzahl überprüfe, damit wir die Funktion möglicherweise überhaupt $docheck
nicht aufrufen, wenn sie nicht 1 ist.
Dies funktioniert, weil if
ein beliebiger Befehl verwendet wird und aus dem Beendigungsstatus dieses Befehls entschieden wird, was zu tun ist. Hier verwenden wir einen [ ... ]
Test zusammen mit einem Aufruf Ihrer Funktion, wobei &&
dazwischen ein zusammengesetzter Befehl erstellt wird. Der Exit-Status des zusammengesetzten Befehls wäre wahr, wenn sowohl der [ ... ]
Test als auch die Funktion als Exit-Status Null zurückgeben würden, was den Erfolg signalisiert.
Als Stilnotiz würde ich den Funktionstest nicht durchführen lassen, ob das Array das Element nicht enthält, sondern ob es das Element enthält, und dann
if [ "$docheck" -eq 1 ] && ! contains "$fruit" "${blacklist[@]}"; then ...
Einen Funktionstest negativ Willen vermasseln Logik in den Fällen , in Erwägung , wo Sie tun testen wollen , ob das Array das Element enthält ( if ! notContainsElement ...
).