
Я могу делать только простые выражения, например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 также есть арифметические расширения, которые немного удобнее при сравнении переменных.
Видетьздесьдля получения дополнительной информации.