Как проверить сложные выражения с помощью bash?

Как проверить сложные выражения с помощью bash?

Я могу делать только простые выражения, например1=1 and 0=1

test 1 = 1 -a 0 = 1 

Но как делать сложные выражения, например 1=1 and (0=1 or 1=1)?

решение1

Либо используйте несколько тестовых вызовов:

test 1 = 1 && test 0 = 1 -o 1 = 1

или [[:

[[ 1 = 1 && (0 = 1 || 1 = 1) ]]

решение2

Вы можете использовать testили [..., ]но будьте осторожны, помня, что скобки должны быть экранированы, а термины должны быть разделены пробелами:

if [ \( a = a \) -a \( a = b -o b = b \) ]
then echo Yes
else echo No
fi

Для меня это означает «Да». Однако обычно проще использовать оператор оболочки Bash и Korn [[... ]]вместо этого; вам не придется делать так много экранирований.

решение3

На этот вопрос уже дан ответ, но вот несколько советов по стилю, которые вы можете принять во внимание (а может быть и отвергнуть :-) ):

Если вы пишете это и находите это запутанным, то, возможно:

  • Используйте дополнительные (), даже если они не нужны, это может сделать текст более понятным.
  • Также можно использовать вложенные циклы вместо множества операторов and.

решение4

Флориан в целом прав, но имейте в виду, что в bash также есть арифметические расширения, которые немного удобнее при сравнении переменных.

Видетьздесьдля получения дополнительной информации.

Связанный контент