Por que o espaço está sendo contado como nova linha no shell script? [duplicado]

1

Eu escrevi o seguinte script. Eu quero ler um arquivo e imprimir como linha por linha, mas considerando o espaço como nova linha. por que é que?

#!/bin/bash
for i in 'cat data.txt'
do
echo $i
done

Entrada: salva no nome do arquivo data.txt

B  FM_Server10_grp GPCBIOEMM10          Y          N               ONLINE

Saída:

B
FM_Server10_grp
PCBIOEMM10
Y
N
ONLINE

Outra pergunta: como extrair apenas o valor numérico como 10 de GPCBIOEMM10 ?

    
por Leon 18.12.2015 / 20:04

1 resposta

1

Por padrão,

for i in ... faz um loop em uma lista de tokens delimitada por espaços em branco, não em uma lista de tokens delimitada por nova linha. O espaço e a nova linha são caracteres de espaço em branco e, portanto, são considerados delimitadores.

Considere:

while read line; do
    echo $line
done < data.txt

read irá, por padrão, ler até uma nova linha e armazenar o que lê na variável dada.

    
por 18.12.2015 / 20:17