Isso funcionará:
if [ "$string1" != "$string2" ] && [ "$string3" != "$string4" ] || [ "$bool1" == true ] ; then echo "conditions met - running code ..."; fi;
Ou rode com {;} para legível e fácil de manter no futuro.
if { [ "$string1" != "$string2" ] && [ "$string3" != "$string4" ] ;} || [ "$bool1" == true ] ; then echo "conditions met - running code ..."; fi;
Referência:
- Não existe variável booleana. Veja este .
- {;}, consulte este .
- & & tem maior precedência do que || = somente em (()) e [[]]
A seguir está o comprovado de & & precedência mais alta só acontece em [[]].
Assuma bool1 = verdadeiro.
[[]]:
if [[ "$bool1" == true || "$bool1" == true && "$bool1" != true ]]; then echo 7; fi #1 #print 7, due to && higher precedence than ||
if [[ "$bool1" == true ]] || { "$bool1" == true && "$bool1" != true ;}; then echo 7; fi #same like #1
if { "$bool1" == true ]] || "$bool1" == true ;} && [[ "$bool1" != true ]] ; then echo 7; fi #not same like #1
Sem [[]],
if [ "$bool1" == true ] || [ "$bool1" == true ] && [ "$bool1" != true ]; then echo 7; fi #1, no output, due to && IS NOT higher precedence than ||
if [ "$bool1" == true ] || { [ "$bool1" == true ] && [ "$bool1" != true ] ;}; then echo 7; fi #not same like #1
if { [ "$bool1" == true ] || [ "$bool1" == true ] ;} && [ "$bool1" != true ]; then echo 7; fi #same like #1