-2

Как я могу написать событие функции предиката оболочки, которое принимает целочисленный аргумент и проверяет, является ли оно четным или нет?

3 ответа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"

(и сохранить микросекунды, пропустив деление)

РЕДАКТИРОВАТЬ: удалено выражение с ! это как-то было историей и не логичным

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .