공백이 포함된 CSV 열을 Bash 배열로 추출

공백이 포함된 CSV 열을 Bash 배열로 추출

CSV 북마크 파일을 다음으로 내보내고 싶습니다.

Physics,physics.stackexchange.com
Stack Overflow,stackoverflow.com
Unix & Linux,unix.stackexchange.com

두 개의 Bash 배열로 분할됩니다. 각 배열에는 파일의 한 열이 포함됩니다. 첫 번째 배열은

"Physics"   "Stack Overflow"   "Unix & Linux"

공백을 처리하는 데 문제가 있습니다. cut이렇게 사용 해보려고 해요

declare names=($(cut -d ',' -f1 ~/bookmarks.csv))

모든 단어가 분리된 배열을 생성합니다. 예를 들어, echo ${names[1]}반환

Stack

설마

Stack Overflow

답변1

Stack Overflow공백이 있으므로 배열에 할당할 때 두 개의 다른 변수로 처리됩니다. BASH다른 쉘(예: 등) 에서도 KSH변수 이름에는 공백이 포함될 수 없으므로 변수를 Stack Overflow작은따옴표나 큰따옴표로 묶어도 작동하지 않습니다.

다음 명령을 사용하여 이를 확인할 수 있습니다.

export Stack Overflow=name
echo $Stack Overflow 

사실상 출력은 $Stack(아직 값이 선언되거나 할당되지 않음) Overflow에 대한 인수 와 단어 가 됩니다 .echoOverflow

echo $Overflow

이는 해당 값을 변수에 할당하는 명령을 name사용하여 출력됩니다 .exportStackOverflow=name

다음 중 하나를 시도하는 경우:

export "Stack Overflow'=name
export 'Stack Overflow'=name

오류 -bash: export: Stack Overflow=name': not a valid identifier또는 가 표시됩니다 -bash: export: Stack Overflow=name': not a valid identifier.

당신이 할 수 있는 한 가지는 두 문자열 사이에 밑줄을 넣는 것입니다:

export Stack_Overlow=name

이렇게 하면 echo $Stack_Overflow출력이 제공됩니다 name. CSV 파일의 내용에 공백이 포함되어 있으므로 더 많은 작업이 필요합니다.

관련 정보