O lado direito de &&
só será avaliado se o status de saída do lado esquerdo for zero. ||
é o oposto: ele avaliará o lado direito apenas se o status de saída do lado esquerdo for diferente de zero.
Você pode considerar [ ... ]
como um programa com um valor de retorno. Se o teste dentro avaliar true, ele retorna zero; ele retorna diferente de zero.
Exemplos:
$ false && echo howdy!
$ true && echo howdy!
howdy!
$ true || echo howdy!
$ false || echo howdy!
howdy!
Notas extras:
Se você fizer which [
, poderá ver que [
realmente aponta para um programa! Normalmente não é o que roda em scripts; execute type [
para ver o que realmente é executado. Se você quiser usar o programa, apenas forneça o caminho completo da seguinte forma: /bin/[ 1 = 1
.