Você tem muitos colchetes no segundo código. [
é sinônimo de test
. Então, existem duas maneiras de fazer o que você quer. Uma é fazer tudo dentro de uma única instrução de teste, caso em que há apenas um conjunto de colchetes:
if [ \( $TO_MAJOR -eq 7 -a $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 \) -o $TO_MINOR -lt 3 ]; then
O outro é usar os operadores &&
e ||
do shell para conectar vários comandos de teste
if [ $TO_MAJOR -eq 7 ] && ...
Mas o que você tem não funciona porque, embora [
seja sinônimo de test
, [
não faz sentido em uma instrução test
.