Задать вопрос
@ymfront

Как в bash-скрипте сделать двойное условие?

Пытаюсь написать двойное условие:

if [ [ "$projectDir" = "video" -o "$projectDir" = "audio" ] -a "$flag" != "noflag" ]


То есть условие должно выполняться при выполнении следующих условий: если $projectDir равен "video" или "audio", и $flag не равен "noflag".

Но выдается ошибка: [: too many arguments

Как правильно написать такое условие?

Конечно можно сначала проверить первое условие, и внутри него прописать второе условие. Но хотелось бы как-то покороче запись сделать.
  • Вопрос задан
  • 96 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 4
if [[ "$projectDir" == "video" || "$projectDir" == "audio" ]] && [ "$flag" != "noflag" ]
Ответ написан
Комментировать
hint000
@hint000
у админа три руки
Круглые скобки работают внутри [[ ]], но не работают внутри [ ].
Обратите внимание, что между двумя брекетами [[ не должно быть пробела, это единый оператор проверки, а не один [ внутри другого [.
if [[ ( "$projectDir" = "video" || "$projectDir" = "audio" ) && "$flag" != "noflag" ]]

Но попробуем убить двух зайцев: оставить конструкцию возможно ближе к вашей исходной и при этом обойтись [ и не использовать [[. Выходит костыльно, что ж.
if [ "$([ "$projectDir" = "video" -o "$projectDir" = "audio" ]&& echo 1)" -a "$flag" != "noflag" ]
Ответ написан
if [ "$projectDir" = "video" -o "$projectDir" = "audio" ]; then
    if [ "$flag" != "noflag" ]; then
        # Ваш код, если projectDir = "video" или "audio", и flag не равен "noflag"
        echo "Проект: $projectDir, флаг установлен."
    else
        # Ваш код, если projectDir = "video" или "audio", но flag = "noflag"
        echo "Проект: $projectDir, флаг 'noflag'."
    fi
else
    # Ваш код, если projectDir не равен "video" или "audio"
    echo "Проект не является 'video' или 'audio'."
fi
Ответ написан
Комментировать
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
if [ "$projectDir" = "video" -o "$projectDir" = "audio" ] && [ "$flag" != "noflag" ]; then
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы