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?


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).


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.