Por que não consigo usar o comando -a para dividir uma string em palavras? [duplicado]

1

Eu tenho um arquivo de entrada de amostra chamado in com o seguinte conteúdo:

m@m-X555LJ:~/wtfdir$ cat in
asdf1 jkl1
asdf2 jkl2
asdf3 jkl3

Eu agora executo:

m@m-X555LJ:~/wtfdir$ mapfile < ./in

Como esperado, a variável MAPFILE agora é uma matriz que divide o arquivo in em linhas:

m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[0]}
asdf1 jkl1
m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[1]}
asdf2 jkl2

Então agora eu quero quebrar a primeira linha em palavras. AFAIK read -a arrname lê uma linha da entrada padrão, divide em palavras e armazena o resultado em uma matriz chamada arrname . Então eu digito:

m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[0]} | read -a words

No meu modelo mental, isso é o que deve acontecer: echo ${MAPFILE[0]} ecoa a primeira linha de MAPFILE (ou seja, asdf1 jkl1 ) na saída padrão, mas isso é canalizado na entrada padrão de read -a words , então read deve ler esta linha e dividi-la em palavras e armazenar o resultado em uma matriz chamada words .

No entanto, infelizmente, isso não acontece:

m@m-X555LJ:~/wtfdir$ echo ${words[0]}

m@m-X555LJ:~/wtfdir$

Sim. echo ${words[0]} não imprime nada, enquanto eu esperava imprimir asdf1 .

Por que isso acontece? E onde está o meu erro? E como fazer isso funcionar?

    
por gaazkam 15.10.2018 / 13:25

1 resposta

0

Isso fará o que você quiser

read -a words <<< ${MAPFILE[0]}

E de acordo com isso, link você deve sempre usar um "-r", ou seja,

read -r -a words <<< ${MAPFILE[0]}

$ echo ${words[0]}
asdf1
    
por 15.10.2018 / 14:02