Cuidado com os operadores condicionais no bash

Você pensaria que [[pode ser usado onde quer que [seja usado no bash. Afinal, parece ser uma versão melhor do [. Mas você pouparia alguns momentos frustrantes se reconhecer as diferenças entre eles. Aqui está uma diferença digna de nota.

Observe que -aé o operador para ‘e’ em [.

[ ( 'hello' == 'hello' ) -a  ( 'world' == 'world' ) ] # WORKS

Mas você não pode construir condições compostas usando -aem [[.

[[ ( 'hello' == 'hello' ) -a  ( 'world' == 'world' ) ]] # DOES NOT WORK

Com [[, use o &&operador.

[[ ( 'hello' == 'hello' ) &&  ( 'world' == 'world' ) ]] # WORKS