Как я могу написать событие функции предиката оболочки, которое принимает целочисленный аргумент и проверяет, является ли оно четным или нет?
3 ответа
3
Используйте оператор по модулю
Пример:
#!/bin/bash
iseven() {
return $(($1 % 2))
}
if iseven 10; then echo 10 is even; else echo 10 is odd; fi
if iseven 11; then echo 11 is even; else echo 11 is odd; fi
2
Проверьте остаток:
var1=7
[ $((var1%2)) -ne 0 ] && echo "odd"
var2=4
[ $((var2%2)) -eq 0 ] && echo "even"
... это путь. Хотя я запутался с вашим последующим редактированием вопроса с вопросом о « событии функции предиката ».
1
На самом деле bash имеет побитовый оператор AND, так что побитовый AND с 1 - это то же самое концептуально с использованием % 2
для получения остатка мода 2
[ $((var & 1)) -ne 0 ] && echo "odd"
[ $((var & 1)) -eq 0 ] && echo "even"
(и сохранить микросекунды, пропустив деление)
РЕДАКТИРОВАТЬ: удалено выражение с !
это как-то было историей и не логичным