'[' не является токеном группировки в sh. Вы можете сделать:
if [ expr ] && [ expr ]; then ...
или
if cmd && cmd; then ...
или
if { cmd && cmd; }; then ...
Вы также можете использовать скобки, но семантика немного отличается, так как тесты будут выполняться в подоболочке.
if ( cmd && cmd; ); then ...
Также обратите внимание, что «if cmd1; затем cmd2; fi» в точности совпадает с «cmd1 && cmd2», поэтому вы можете написать:
test $# = 4 && test $4 = PREV && echo yes
но если вы хотите проверить, что последним аргументом является строка PREV, вы можете подумать:
eval test \$$# = PREV && echo yes