Как в bash-скрипте можно задать условие, состоящее из двух частей?

Я пытаюсь сформулировать двойное условие в следующем виде: <br/> <br/> <pre><code class="bash">if [ [ "$projectDir" = "video" -o "$projectDir" = "audio" ] -a "$flag" != "noflag" ]</code></pre> <br/> <br/> Условие должно выполняться, если переменная $projectDir равна "video" или "audio", и одновременно переменная $flag не равна "noflag". <br/> <br/> Однако возникает ошибка:  [: too many arguments <br/> <br/> Как следует правильно записать это условие в более компактной форме? <br/>
  • 16 ноября 2024 г. 11:13
Ответы на вопрос 2
Для правильного составления условия в Bash скрипте вам необходимо использовать один набор квадратных скобок, и для объединения условий рекомендуется использовать правильный синтаксис. Вот как это можно записать:

```bash
if [[ ("$projectDir" == "video" || "$projectDir" == "audio") && "$flag" != "noflag" ]]; then
    # Ваши команды, если условие истинно
fi
```

Обратите внимание на следующие моменты:

1. Используйте `[[ ... ]]` вместо `[ ... ]` — это позволяет использовать более продвинутый синтаксис. 
2. Вместо `=` следует использовать `==` для сравнения строк в `[[ ... ]]`.
3. Используйте `||` для логического "ИЛИ" и `&&` для логического "И".
4. Заключите условия в скобки для улучшения читаемости, хотя они не обязательны в этом конкретном случае.

Таким образом, ваше условие проверяет, является ли `projectDir` равным "video" или "audio", и одновременно проверяет, что `flag` не равен "noflag".
if [[ "$projectDir" == "video" || "$projectDir" == "audio" ]] && [ "$flag" != "noflag" ]
Похожие вопросы