파일에서 공백이 포함된 인용된 배열 요소를 읽으시겠습니까?

파일에서 공백이 포함된 인용된 배열 요소를 읽으시겠습니까?

다음을 사용하여 데이터를 STDIN배열에 전달합니다.read

prompt$ cat myfile
a "bc" "d e" f
prompt$ read -a arr < myfile

그러나 read인용된 문자열에 주의를 기울이지 않는 것 같고 5개의 요소가 있는 배열을 제공합니다.

prompt$ echo ${#arr[@]}
5
prompt$ echo ${arr[@]:0}
a "bc" "d e" f
prompt$ echo ${arr[2]}
"d
prompt$ echo ${arr[3]}
e"

저는 기본값 IFS: \t\nin 을 사용하고 있습니다 bash. 다양한 도구를 사용하여 작업을 수행하는 방법은 여러 가지가 있지만 읽기가 인용된 문자열을 지원하지 않는다는 사실에 놀랐습니다.

따옴표로 구분된 목록을 배열에 넣는 것에 대한 다른 제안 사항이 있습니까?

답변1

나는 당신이 요구하는 것을 성취하는 좋은 방법을 생각할 수 없지만 입력 파일에 bash에 유효한 구문인 공백으로 구분된 토큰이 포함되어 있다는 것을 알고 있다면 다음과 같은 것이 작동할 수 있습니다.

declare -a arr="($(<myfile))"

답변2

이것을 사용하십시오 :

IFS=$'\n' arr=( $(xargs -n1 <file) )
  • IFS=$'\n'Bash 내부 필드 구분 기호를 줄 바꿈으로 설정하십시오.
  • arr=( ... )배열 정의.
  • xargs -n1 <file xargs최대 1개의 매개변수를 읽습니다 file. 따옴표 안의 문자열은 매개변수로 읽힐 때 함께 유지됩니다.

출력(한 줄에 하나의 요소):

$ printf "%s\n" "${arr[@]}"
a
bc
d e
f

관련 정보