Bash Script para loop que está quebrando linhas em vez de usar toda a linha

1

Estou escrevendo um roteiro muito simples e estou ficando preso a algo estúpido. Basicamente eu tenho um arquivo de texto no qual cada linha é composta de 3 palavras separadas por um espaço. Quando você gata o arquivo, ele mostra tudo corretamente. Por exemplo, catting o arquivo é algo como isto:

bird dog mouse
ferret bunny hare

Estou fazendo um loop for simples assim:

for line in $(cat pets.txt)
do
     echo $line
     "command $line"
done

O eco está mostrando o problema. O comando precisa ser executado como

command bird dog mouse

e, em vez disso, está sendo executado como

command bird
command dog
command mouse

Parece que isso deve ser uma solução simples, mas não consigo encontrar meus termos de pesquisa corretamente para encontrar a solução.

Obrigado!

    
por Genel 11.05.2012 / 23:17

1 resposta

5

O problema é que usar cat em uma substituição de subshell como essa fará com que o bash tokenize a saída de acordo com IFS , que por padrão inclui espaços. Esse é o comportamento normal de um loop for . Provavelmente a correção mais fácil é:

while read line
do
     echo $line
     command $line
done < pets.txt

Observe que bash dividirá os argumentos até command , no entanto. Se você quisesse a linha como um argumento, basta citar:

while read line
do
     echo $line
     command "$line"
done < pets.txt
    
por 11.05.2012 / 23:22

Tags