Логическое значение с 3 или более выражениями в скрипте sh
Как я могу объединить "И" и "И" с 3 или более выражениями? Мне это нужно для этого:
(X или Y или Z) и М
Это правильно?
if [ ["${2}" = "X" -o "${2}" = "Y" -o "${2}" = "Z"] -a "${3}" = "M"]
then
echo "correct"
exit 1
fi
1 ответ
Решение
Реализация оболочки не требуется использовать -o
а также -a
как булевы комбинаторы, и их использование не рекомендуется в спецификации POSIX. Вместо этого используйте ||
а также &&
присоединиться к нескольким вызовам [
,
if { [ "$2" = "X" ] || [ "$2" = "Y" ] || [ "$2" = "Z" ]; } && [ "$3" = "M" ]; then
echo "correct"
exit 1
fi
Обратите внимание, что [
это команда (псевдоним для test
), а не оператор группировки, поэтому вы не можете просто вложить их, как в вашем примере. На самом деле, ]
не служит никакой реальной цели; это просто требуется [
чтобы завершить иллюзию. Вышеуказанное идентично
if { test "$2" = "X" || test "$2" = "Y" || test "$2" = "Z"; } && test "$3" = "M"; then
echo "correct"
exit 1
fi