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
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?
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
Tags bash shell-script