Этот вопрос отличается от множества возможных дубликатов, и я не смог найти ответ на этот вопрос или даже спросил ...Множественные И условия в bash, которые работают независимо на основе разделителя условий ИЛИ?
Может быть, я пропустил простую логику здесь, но я столкнувшись с проблемой:
Я пытаюсь получить заявление if
, где должны быть выполнены условия, например $V1
И $V2
ИСТИННЫЕ || ИЛИ $V3
И $V4
ИСТИНЫ. Вот простой тест:
#!/bin/bash
V1="File Placeholder"
#echo $V1
V2="May contain some text"
#echo $V2
V3="Some command output"
#echo $V3
V4="Command output contains this text"
#echo $V4
if [[ "$V1" ]] && [[ "$V2" == *"contain some"* ]] || [[ "$V3" ]] && [[ "$V4" == *"output contains"* ]]
then
echo "Hello $V1"
echo "World full of: $V2"
fi
Значение, я хотел бы сделать что-нибудь, если:
$V1
истинно (файл существует) И $V2
истинно (некоторая строка найдена)
ИЛИ
$V3
истинно (то есть, не нулевой) И $V4
верно (ком Выход MAND содержит текст)
Это, кажется, работает немного, но я понимаю, что это не работает должным образом: он не возвращает TRUE, если оба вторых &&
условия FALSE, а именно: || [[ "$V6" ]] && [[ "$V4" == *"output contains"* ]]
(почему я думаю, что может быть с видом на некотором логика, возможно, может быть отменена каким-то образом?).
Почему это не работает, поскольку я предполагаю, что это будет if a AND b are TRUE ... OR ... if x AND z are TRUE
?
Возможно, это помогает http://stackoverflow.com/a/14965071/2442831 – Lino
Спасибо! Третий пример «порядок оценки» выглядит так, как будто это может быть то, что мне нужно. Я отдам его и отчитаю. – TryTryAgain
Операторы * shell * && и '||' имеют одинаковый приоритет, в отличие от обычных булевых операторов на большинстве языков. То есть 'a || b && c' совпадает с '(a || b) && c', а не' a || (b && c) '. – chepner