Логическое значение с 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
Другие вопросы по тегам