Qual é o uso de ; em um comando de linha única?

Qual é o uso de ; em um comando de linha única?

O que ;significa em scripts de linha única como este:

while true; do sudo -n true; sleep 60; kill -0 '$$' || exit; done 2>/dev/null &

Significa nova linha ou "próximo comando"?

Responder1

É um separador de comandos. Embora, em primeiro lugar, seja melhor pensar nisso como um encerramento da whiledeclaração.

Por exemplo, se você quisesse fazer um loop enquanto algum comando retorna sucesso, você faria algo como

while test -f /foo; do some_command; done`

O ponto e vírgula é usado para indicar o final dos argumentos para test. Caso contrário, pensaria que esse doé outro argumento para test.

No entanto, você pode usar novas linhas em vez de ponto e vírgula. O seguinte seria exatamente equivalente ao exemplo acima, apenas sem ponto e vírgula

while test -f /foo
do
some_command
done

Na verdade, com o bash, se você executar o comando acima e depois que ele terminar (ou CTRL + C), se você voltar no histórico (teclas de seta para cima ou outros enfeites), notará que ele substitui o multi-linha comando com um usando ponto e vírgula.


Então, sim, a sintaxe para coisas como ifquebrar whileo comportamento normal do shell.
Pessoalmente, sempre achei a sintaxe estranha, pois doparece estranha. Mas você se acostumar com isso.

informação relacionada