Во втором коде слишком много скобок. [
является синонимом теста
. Итак, есть два способа делать то, что вы хотите. Один - сделать все это в одном тестовом операторе, и в этом случае есть только один набор скобок:
if [ \( $TO_MAJOR -eq 7 -a $TO_MINOR -eq 3 -a $TO_PATCH -lt 2 \) -o $TO_MINOR -lt 3 ]; then
Другой - использовать операторы оболочки &&
и ||
] для подключения нескольких тестовых команд
if [ $TO_MAJOR -eq 7 ] && ...
Но то, что у вас есть, не работает, потому что, хотя [
является синонимом test
, [
не имеет смысла внутри тестовый
оператор.