Diferença entre [e [[em instruções if [duplicadas]

0

O seguinte código

if [ $a == "apple" ];
then
    echo "True"
else
    echo "False"
fi

processa "True" ( "False" ) se a="apple" ( a="plum" ). A comparação falha se usarmos curingas:

if [ $a == "appl"* ];

e será corrigido se alguém substituir [ por [[ :

if [[ $a == "appl"* ]];

Qual é a diferença entre as declarações [ e [[ in if ?

    
por Viesturs 23.12.2017 / 16:52

1 resposta

2
  • [ é um comando (basicamente uma variante do comando test ). [[ é embutido em muitos shells.
  • Quando você escreve foo* dentro de [...] expansão de nome de arquivo ( aka globbing) ocorre; enquanto dentro de [[...]] correspondência de padrões ocorre.
  • [[ é mais poderoso e capaz que [ , mas não deve ser usado se a portabilidade for uma preocupação.
  • [ e [[ não fazem parte da sintaxe if , você pode usá-los como em [ "$exit" = 'yes' ] && exit .
  • Dentro de [...] você deve preferir = em vez de == . Até onde sei, o segundo é aceito em muitos shells, mas não é compatível com POSIX.

A propósito, eu recomendo que você cite duas vezes suas variáveis, mesmo que você realmente saiba como divisão de palavras se comportará.

    
por 23.12.2017 / 17:10