bash está retirando o espaço em branco inicial das variáveis [duplicado]

4

Sou novo no bash (ksh apenas até agora). Eu estou lutando com espaço em branco sendo variado de variáveis. Eu li um número de postagens sobre o tratamento de bash dos principais espaços em branco, mas não sei como corrigi-lo no meu exemplo.

echo "No space"         > x.tmp
echo "     Some space" >> x.tmp
cat x.tmp
cat x.tmp | while read line
do
   echo "$line" >> y.tmp
done
cat y.tmp

Saída:

No space
     Some space
No space
Some space

O que preciso fazer para preservar o espaço em branco?

Obrigado.

    
por Richard 11.04.2018 / 21:37

1 resposta

7

Você precisa fazer

while IFS= read -r line

Definir o IFS como a string vazia preservará o espaço em branco.
Usar -r preservará as sequências de barra invertida no texto.

Se o desempenho for uma preocupação, observe que um loop while read é muito lento no bash. Se você quiser injetar a entrada em linhas, e o consumo de memória não for um problema, leia a entrada em uma matriz de linhas:

mapfile -t lines < x.tmp
for line in "${lines[@]}"; do
    do_something_with "$line"
done
    
por 11.04.2018 / 21:38

Tags