Na documentação do bash :
(list)
A lista é executada em um ambiente subshell (consulte AMBIENTE DE EXECUÇÃO DE COMANDO abaixo). As atribuições variáveis e os comandos internos que afetam o ambiente do shell não permanecem em vigor após a conclusão do comando. O status de retorno é o status de saída da lista.
Em outras palavras, verifique se o que acontece na 'lista' (como a cd
) não tem efeito fora do (
e )
. A única coisa que vai vazar é o código de saída do último comando ou com set -e
o primeiro comando que gera um erro (excepto alguns, como if
, while
, etc.)
((expression))
A expressão é avaliada de acordo com as regras descritas abaixo em AVALIAÇÃO ARITMÉTICA. Se o valor da expressão for diferente de zero, o status de retorno será 0; caso contrário, o status de retorno é 1. Isso é exatamente equivalente a deixar "expressão".
Esta é uma extensão do bash, permitindo que você faça contas. É um pouco semelhante ao uso expr
sem todas as limitações de expr
(como ter espaços em todos os lugares, escapar *
etc.)
[[ expression ]]
Retorne um status de 0 ou 1, dependendo da avaliação da expressão da expressão condicional. As expressões são compostas das primárias descritas abaixo em EXPRESSÕES CONDICIONAIS. A divisão de palavras e a expansão do nome do caminho não são executadas nas palavras entre os [[e]]; expansão de til, expansão de parâmetro e variável, expansão aritmética, substituição de comando, substituição de processo e remoção de cotação. Operadores condicionais como -f devem estar sem aspas para serem reconhecidos como primários.
Quando usados com [[, os operadores <e> classificam lexicograficamente usando o código do idioma atual.
Isso oferece um teste avançado para comparar seqüências de caracteres, números e arquivos, um pouco como test
ofertas, mas mais poderoso.
[ expr ]
Retorne um status de 0 (verdadeiro) ou 1 (falso), dependendo da avaliação da expressão condicional expr. Cada operador e oper e deve ser um argumento separado. As expressões são compostas das primárias descritas acima em EXPRESSÕES CONDICIONAIS. test não aceita nenhuma opção, nem aceita e ignora um argumento de - como significando o fim das opções.
[...]
Este chama test
. Na verdade, antigamente, [
havia um link simbólico para test
. Funciona da mesma maneira e você tem as mesmas limitações. Como um binário sabe o nome com o qual foi iniciado, o programa de teste pode analisar parâmetros até encontrar um parâmetro ]
. Truques divertidos do Unix.
Observe que, no caso de bash
, [
e test
são funções internas (como mencionado em um comentário), ainda assim as mesmas limitações se aplicam.