Por que 'ler' remove espaços em branco mesmo com a bandeira -N?

2

De acordo com o manual de read (e já que é interno, não man read , mas help read ):

-N nchars Return only after reading exactly NCHARS characters, unless EOF is encountered or read times out, ignoring any delimiter

No entanto, mesmo se o sinalizador -N for usado, read ainda parece querer remover o delimitador dos dados de entrada. Tome os seguintes dados como um exemplo:

# readfail.sh - Reads 5 characters at a time, and adds "RegEx style" start and end characters for clarity
while read -r -N 5 data; do
    echo "^${data}\$"
done;

echo "^${data}\$"  # There will be data left over just because of the way 'read' uses exit codes

E aqui está a saída:

$ echo -n "Lorem ipsum dolor sit amet" | ./readfail.sh
^Lorem$
^ipsu$
^m dol$
^or si$
^t ame$
^t$

Observe que a segunda linha tem apenas 4 caracteres. Isso porque é suposto haver um espaço entre Lorem e ipsum , resultando na seguinte saída de cinco caracteres: ^ ipsu$

Posso corrigir esse problema definindo IFS= antes do loop , mas não read supostamente estar ignorando quaisquer delimitadores por causa do -N flag? Isso é um bug ou comportamento pretendido?

    
por IQAndreas 04.04.2015 / 19:32

1 resposta

2

-N faz com que o delimitador de fim de linha seja ignorado. Bash lê exatamente o número especificado de caracteres, não importa quais sejam esses caracteres. Isso é independente da maneira como o que foi lido é relatado ao script na forma de conteúdo variável. Que usa o mecanismo usual de divisão IFS .

    
por 05.04.2015 / 00:48

Tags