Qual é a diferença entre [e [[in BASH? [duplicado]

9

Quando devo usar um único colchete? [

Quando devo usar colchetes duplos? [[

Ambos são compatíveis com POSIX?

    
por Jhonathan 24.09.2012 / 17:23

2 respostas

6

O colchete único é a forma tradicional e geralmente é implementado como um comando externo. O colchete duplo é uma extensão bash (e ksh e zsh), não é no POSIX e tem a vantagem de uma sintaxe mais limpa (veja abaixo) e não usa um processo separado.

Uma das diferenças de sintaxe é que < e > operadores (nota: não padrão POSIX) não precisam ser ignorados ou citados para evitar a leitura como um operador de redirecionamento. Além disso, [ requer alguns truques no caso de uma das cadeias poder estar vazia ou começar com um hífen. É por isso que você vê os scripts fazendo algo como [ "x$ASD" == xValue ] , enquanto que com o bash eles poderiam simplesmente usar [[ $ASD == Value ]] . Note que o truque "x" não é estritamente necessário com um comando compatível com POSIX testando apenas uma coisa, veja esta questão para mais detalhes sobre isso.

O bash FAQ tem mais informações sobre as diferenças. Isso também foi respondido em outro site de troca de pilhas.

    
por 24.09.2012 / 17:26
1

Apenas [ ( test ) está no POSIX. Você não encontrará [[ especificado em POSIX, exceto como uma palavra reservada que as implementações pode utilizar. O Bash realmente usa [[ como um operador de teste aprimorado, e se você estiver escrevendo scripts direcionados especificamente para bash , use sempre [[ porque ele é muito mais poderoso que [ e mais seguro de usar também. Se, no entanto, você está direcionando POSIX sh , você precisa usar [ , e certifique-se de citar argumentos e não usar mais de 4 argumentos para [ .

    
por 24.09.2012 / 17:32

Tags