Ваша функция использует возвращаемые значения, но вы пытаетесь использовать ее так, как если бы возвращаемые значения были напечатаны. Правильное использование для «если статус выхода ненулевой» упрощается до
if ! inArray "${value}" "${values[@]}"; then
Боковое примечание: вы получаете ошибку не в том, что -eq
ожидает унарный оператор, это
bash: [: -eq: unary operator expected
означает, что [
ожидал унарный оператор, но вместо этого получил -eq
, бинарный оператор. Это связано с тем, что ваша подстановка команд не заключена в кавычки, и когда команда ничего не возвращает, ваш тест становится
[ -eq 1 ]
При правильном цитировании
[ "$(inArray "${value}" "${values[@]}")" -eq 1 ]
тест будет жаловаться, что он ожидает целое число выражение (но вместо этого получает пустую строку), потому что оно расширяется до
[ "" -eq 1 ]