Eu tenho um script de shell que contém o seguinte:
case $1 in
0 )
echo $1 = 0;
OUTPUT=3;;
1 )
echo $1 = 1;
OUTPUT=4;;
2 )
echo $1 = 2;
OUTPUT=4;;
esac
HID=$2;
BUNCH=16;
LR=.008;
Os pontos-e-vírgulas são completamente supérfluos no snippet acima? E há alguma razão para algumas pessoas usarem ponto-e-vírgula duplo?
Parece que o ponto-e-vírgula é apenas um separador, algo que você usaria em vez de uma nova linha.
De acordo com
man bash
:Portanto, o
;
pode ser um metacaractere ou operador de controle, enquanto o;;
é sempre um operador de controle (no caso de comando).Em seu código específico,
;
nem tudo no final da linha é necessário. No;;
entanto, é necessário.fonte
;
e;;
, então? Não estou familiarizado o suficiente com a análise sintática do BASH para saber a diferença prática entre o que o BASH chama de "metacaractere" e o que ele chama de "operador de controle".No caso especial de find,
;
é usado para encerrar comandos invocados por -exec. Veja a resposta de @kenorb para esta pergunta .fonte
@ Opensourcebook-Amit
newlines equivalente a um único ponto
;
- e - vírgula no terminal ou no script de shell.Veja os exemplos abaixo:
No terminal:
No script de shell:
Mas não concordo com o comentário que
&
equivale a nova linha ou ponto-e-vírgula único&
é executar comandos em segundo plano também um separador de comandos, mas não funcionou como ponto e vírgula ou nova linha.fonte
@Ignacio Vazquez-Abrams
Na verdade, isso não é totalmente preciso, ponto-e-vírgula único no final de uma linha não é supérfluo e definitivamente não é a mesma coisa que novas linhas.
Do Manual de Referência Bash
Os comandos separados por "nova linha" podem ser executados em paralelo quando os comandos separados por ponto e vírgula são sempre executados sequencialmente
fonte
A sequence of one or more newlines may appear in a list to delimit commands, equivalent to a semicolon.
Portanto, o que você citou sobre o ponto-e-vírgula se aplica igualmente às novas linhas.&
não do\n
. Em um comentário, afirma-se que ele pode pular o ponto-e-vírgula porque, aparentemente,&
também é um separador de comandos, assim como;
e\n
.