Ponto e vírgula em estruturas condicionais

35

Por que colocar ponto e vírgula em um e não em outro?

O resultado é o mesmo

Código um

if [ "a" == "a" ]
then
 echo "true"
fi

Código dois

if [ "a" == "a" ];
then
 echo "true";
fi

Ponto e vírgula no segundo código são desnecessários?

Quando é necessário colocar ponto e vírgula?

Jhonathan
fonte
2
Isso foi respondido suficiente e adequadamente, mas eu queria que o OP também soubesse disso; apenas substitui qualquer fim de linha, para que você possa combinar dois comandos em uma linha, por exemplo:svn up; make
Aaron D. Marasco
11
Observe também que dois pontos e vírgulas ;;são usados ​​para separar correspondências nas instruções de caso. ;;é obrigatório aqui, não é opcional .... mas ;;não é a mesma coisa que ;ou ; ;, apenas se parece um pouco com isso. Ponto-e-vírgula simples ;funcionam normalmente nas partes COMMANDS de uma instrução de caso.
cas

Respostas:

31

O ponto e vírgula é necessário apenas quando o final da linha está ausente:

if [ "a" == "a" ] ; then echo "true" ; fi

Sem ponto e vírgula, você recebe um erro de sintaxe.

Não entendi sua pergunta sobre aspas. Você pode ser mais específico?

(E, a propósito, usar em =vez de ==é mais portátil e compatível com POSIX).

choroba
fonte
As aspas no segundo código são desnecessárias?
precisa saber é o seguinte
2
Todas as citações em ambas as amostras são desnecessárias.
choroba 21/09/12
6

O ponto-e-vírgula é frequentemente usado, porque algumas pessoas (/ eu, por exemplo) gostam de um estilo como este:

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

Portanto, se a palavra-chave then for colocada na linha de condição, será necessária porque um novo comando é iniciado, conforme escrito por choroba.

Em relação às aspas na verificação de condição, elas são frequentemente usadas com variáveis ​​para garantir que nenhuma exceção ocorra se nada for atribuído à variável. Esse é um estilo mais seguro e parece desnecessário, mas mesmo na programação de shell, de tempos em tempos, os programas são processados, embora o conteúdo não possa ser atribuído a variáveis. Em seguida, o comando ainda está funcionando porque uma string vazia é comparada.

Lobo
fonte