in
다음 내용이 포함된 샘플 입력 파일이 있습니다 .
m@m-X555LJ:~/wtfdir$ cat in
asdf1 jkl1
asdf2 jkl2
asdf3 jkl3
이제 다음을 실행합니다.
m@m-X555LJ:~/wtfdir$ mapfile < ./in
예상한 대로 변수는 MAPFILE
이제 in
파일을 여러 줄로 분할하는 배열입니다.
m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[0]}
asdf1 jkl1
m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[1]}
asdf2 jkl2
이제 첫 번째 줄을 단어로 나누고 싶습니다. AFAIK는 read -a arrname
표준 입력에서 한 줄을 읽고 이를 단어로 나누고 결과를 배열에 저장합니다 arrname
. 그래서 나는 다음을 입력합니다:
m@m-X555LJ:~/wtfdir$ echo ${MAPFILE[0]} | read -a words
내 정신 모델에서 일어나야 할 일은 echo ${MAPFILE[0]}
(즉, 단어로 나누고 결과를 .MAPFILE
asdf1 jkl1
read -a words
read
words
하지만 안타깝게도 이런 일은 일어나지 않았습니다.
m@m-X555LJ:~/wtfdir$ echo ${words[0]}
m@m-X555LJ:~/wtfdir$
예. echo ${words[0]}
아무것도 인쇄되지 않지만 예상했던 대로 asdf1
.
왜 이런 일이 발생합니까? 그리고 내 실수는 어디에 있습니까? 그리고 그것을 작동시키는 방법은 무엇입니까?
답변1
이것은 당신이 원하는 것을 할 것입니다
read -a words <<< ${MAPFILE[0]}
그리고 이에 따르면, http://wiki.bash-hackers.org/commands/buildin/read 항상 "-r"을 사용해야 합니다.
read -r -a words <<< ${MAPFILE[0]}
$ echo ${words[0]}
asdf1