[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Re: Ler linha com espaços no início
From: |
Julio C. Neves |
Subject: |
Re: [shell-script] Re: Ler linha com espaços no início |
Date: |
Tue, 13 Nov 2012 16:19:50 -0200 |
Fala Elder,
isso que vc falou eu sei e está no meu livro, o problema são os brancos no
início. Eles não podiam ser ignorados... Se o IFS for diferente, os cpos
vazios não são ignorados. Veja:
$ read a b <<< '1 2'
$ echo $a
1
$ echo $b
2
$ IFS=: read a b <<< '1:2'
$ echo $a
1
$ echo $b
2
Até aqui tudo bem, mas agora vou tirar o 1, mas deixando o IFS (branco ou :)
$ read a b <<< ' 2'
$ echo $a
2
$ echo $b
Nesta última, $a deveria ser vazia e $b deveria ser 2. Vou repetir, porém
usando : como IFS.
$ IFS=: read a b <<< ':2'
$ echo $a
$ echo $b
2
Agora funcionou como deveria: $a vazia e $b = 2
Mas veja:
$ echo "$IFS" | hexdump
0000000 0920 0a0a
Onde:
09 - <TAB>
20 - Espaço (32 em decimal)
0a - <ENTER> (10 em decimal)
Isso significa que o IFS padrão é espaço, <TAB> e <ENTER>. Vamos então
testar com <TAB> como separador:
$ read a b <<< ' 2'
$ echo $a
2
$ echo $b
$
Ou seja, a mesma zebra do espaço em branco. Testei com <ENTER> só por
desencargo de consciência, pois já sabia que a zebra seria a mesma:
$ read a b <<< $(echo -e '1\n2')
$ echo $a
1
$ echo $b
2
$ read a b <<< $(echo -e '\n2')
$ echo $a
2
$ echo $b
$
Abcs,
Julio
*
*
Em 13 de novembro de 2012 13:08, Elder Marco <address@hidden>escreveu:
> **
>
>
> 2012/11/12 Julio C. Neves <address@hidden>:
> > Eu tinha tanta certeza do que falava, que nem testei. Qdo vi o site que
> > postaram aqui na lista e que falava sobre o read, fiz uma massa de
> testes e
> > vi que realmente ele capa os espaços iniciais e finais (isso é bug!). Já
> > fiz uma anotação para colocar na próxima impressão do meu livro.
> >
>
> Júlio,
>
> Aparentemente os desenvolvedores do bash estão cientes disso. Lendo
> com mais atenção
> a ajuda do comando read, notei que este comando não lê exatamente uma
> linha --- como eu
> esperava ---, mas sim as palavras nesta, atribuindo as variáveis
> correspondentes.
> Para saber onde começa e onde acaba uma palavra, os comando read considera
> como
> delimitadores aquilo que está presente na variável IFS. Veja:
>
> Read a line from the standard input and split it into fields.
>
> Reads a single line from the standard input, or from file descriptor FD
> if the -u option is supplied. The line is split into fields as with word
> splitting, and the first word is assigned to the first NAME, the second
> word to the second NAME, and so on, with any leftover words assigned to
> the last NAME. Only the characters found in $IFS are recognized as word
> delimiters.
>
> Dessa maneira, se o comportamento padrão do comando read fosse
> alterado, ele poderia
> gerar resultados inesperados. Talvez fosse uma boa ideia -- eu acho --
> existir algum builtin
> que lesse a linha por completo, sem remover nenhum caractere dela. Ou
> ainda, existir
> alguma opção para este comando que mudasse esse comportamento. Mas mesmo
> não existindo, setar o IFS como sendo '' já resolve o problema.
>
> --
> Elder Marco
>
> GNU/Linux User: #471180
>
> "Contra o positivismo, que pára perante os fenômenos e diz: 'Há apenas
> fatos', eu digo: 'Ao contrário, fatos é o que não há; há apenas
> interpretações'. "(Nietzsche)
>
>
[As partes desta mensagem que não continham texto foram removidas]
- Re: [shell-script] Re: Ler linha com espaços no início, (continued)
- Re: [shell-script] Re: Ler linha com espaços no início, Julio C. Neves, 2012/11/09
- Re: [shell-script] Re: Ler linha com espaços no início, Elder Marco, 2012/11/09
- Re: [shell-script] Re: Ler linha com espaços no início, Alysson Gonçalves de Azevedo, 2012/11/09
- Re: [shell-script] Re: Ler linha com espaços no início, Alysson Gonçalves de Azevedo, 2012/11/09
- Re: [shell-script] Re: Ler linha com espaços no início, Alysson Gonçalves de Azevedo, 2012/11/09
- Re: [shell-script] Re: Ler linha com espaços no início, Julio C. Neves, 2012/11/10
- Re: [shell-script] Re: Ler linha com espaços no início, Fredi Bieging, 2012/11/10
- Re: [shell-script] Re: Ler linha com espaços no início, Elder Marco, 2012/11/12
- Re: [shell-script] Re: Ler linha com espaços no início, Julio C. Neves, 2012/11/12
- Re: [shell-script] Re: Ler linha com espaços no início, Elder Marco, 2012/11/13
- Re: [shell-script] Re: Ler linha com espaços no início,
Julio C. Neves <=
- Re: [shell-script] Re: Ler linha com espaços no início, Elder Marco, 2012/11/14
- Re: [shell-script] Re: Ler linha com espaços no início, Enilton Angelim, 2012/11/14
- Re: [shell-script] Re: Ler linha com espaços no início, Julio C. Neves, 2012/11/15