Por que ler adicionar nova linha com o IFS padrão e uma única variável?

0

Eu estava experimentando com IFS e read . Eu tentei o seguinte e não consigo entender por que isso resultou assim:

$ IFS=$' \t\n'
$ read a <<< "the plain gold ring"
$ printf "=%s=\n" $a
=the=
=plain=
=gold=
=ring=
  1. O a é um array agora? Ou é uma string?
  2. Por que read adicionou nova linha entre duas palavras?
  3. Por que printf é impresso como se estivesse dentro de um loop?

Na verdade, eu esperava que nenhuma separação ocorresse porque estou lendo apenas uma variável a .

    
por joker 25.07.2018 / 17:36

1 resposta

3
  1. Is a an array now? Or is it a string?

É uma string. Você disse a read para ler para uma única variável, a cadeia inteira foi armazenada como a . Se o comando fosse read a b c <<< … , então a obteria the , b obteria plain e c obteria gold ring .

  1. Why did read add newline between two words?

Não, printf porque você disse. Execute echo $a .

  1. Why is printf printing as if it is inside a loop?

Porque $a se expande para várias palavras. O formato que você forneceu espera uma string, ela recebe muitos. Com muitos argumentos printf loops. Compare printf "=%s=\n" "$a" onde "$a" é um único argumento para printf .

    
por 25.07.2018 / 17:43

Tags