Вместо того, чтобы is_odd
возвращал свой результат в качестве кода состояния, я думаю, что лучше напечатать его результат:
is_odd()
{
expr $1 % 2
}
Затем вы можете использовать команду-подстановку (`...`
или $(...)
), чтобы получить результат:
echo -e $in " is an " ${type[$(is_odd $in)]} " number."
Хотя, если честно, в этом конкретном случае я бы просто избавился от функции и использовал арифметическое выражение напрямую & mdash; и, возможно, немного скорректировать кавычки для удобства чтения:
echo -e "$in is an ${type[in % 2]} number."
(Обратите внимание, что двойные кавычки "..."
не предотвращают подстановку параметров ${...}
. Это делают только одинарные кавычки '...'
и обратные косые черты \
. Кроме того, хет-кончик к jordanm для указания из-за того, что индексы массива автоматически обрабатываются как арифметические выражения, даже без expr
или ((...))
или чего-либо еще.)
Тем не менее, если вы действительно хотите вернуть 1
для "нечетного" и 0
для "четного", то, во-первых, вы должны переименовать свою функцию в is_even
(поскольку в Bash 0
означает " Успешные "или" истина "и ненулевые значения означают" ошибка "или" ложь "), и, во-вторых, вы можете использовать следующую команду, чтобы напечатать возвращаемое значение, а затем использовать команду-подстановку. Любой из них должен работать:
echo -e "$in is an ${type[$(is_even $in ; echo $?)]} number."
echo -e "$in is an ${type[$(is_even $in && echo 0 || echo 1)]} number."
(Кстати, я также изменил a
на an
во всех приведенных выше примерах: в английском языке это "нечетное число", "четное число".)