문자열을 단어로 나누기 위해 read -a를 사용할 수 없는 이유는 무엇입니까? [복사]

문자열을 단어로 나누기 위해 read -a를 사용할 수 없는 이유는 무엇입니까? [복사]

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]}(즉, 단어로 나누고 결과를 .MAPFILEasdf1 jkl1read -a wordsreadwords

하지만 안타깝게도 이런 일은 일어나지 않았습니다.

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

관련 정보