Como fazer um loop for na linha de comando?

10

Vamos dar uma simples for loop

#!/bin/bash

for i in 'seq 1 10';
do
    echo $i
done

O ponto-e-vírgula AFAIK nos scripts bash faz com que o shell execute o comando atual de forma síncrona e vá para o próximo. Pressionar enter faz literalmente o mesmo, exceto que não permite inserir o seguinte comando, liberando o buffer imediatamente.

Então, por que o shell não pode interpretar a seguinte linha

for i in 'seq 1 10'; do; echo $i; done

como funciona esse for loop ?

    
por user30167 12.07.2017 / 15:50

2 respostas

7

A sintaxe de um loop for da página de manual bash é

for name [ [ in [ word ... ] ] ; ] do list ; done

Os pontos-e-vírgulas podem ser substituídos por retornos de carro, conforme observado em outro lugar na página de manual bash : "Uma seqüência de uma ou mais linhas novas pode aparecer em uma lista em vez de um ponto-e-vírgula para delimitar comandos."

No entanto, o inverso não é verdadeiro; você não pode substituir arbitrariamente novas linhas por ponto e vírgula. Seu script de múltiplas linhas pode ser convertido em uma única linha desde que você observe as regras de sintaxe acima e não insira um ponto-e-vírgula extra após o do :

for i in 'seq 1 10'; do echo $i; done
    
por 12.07.2017 / 16:22
14

O ponto-e-vírgula após do é um erro e não deveria estar lá.

Os seguintes itens funcionam corretamente:

for i in 'seq 1 10'; do echo $i; done 
    
por 12.07.2017 / 15:53

Tags