sqlite db의 출력을 공백이 있는 ksh 배열로 처리합니다.

sqlite db의 출력을 공백이 있는 ksh 배열로 처리합니다.

다음과 같이 SQLite3 데이터베이스를 쿼리하고 있습니다.

input=$(-separator "," "SELECT field1,field2,field3 FROM table1")

결과는 다음과 같습니다.

Red,Yellow is a color,Blue

이것을 배열에 삽입해야 합니다. 결과를 따옴표로 묶은 필드로 반환하지 않고 이 결과를 ksh의 배열로 설정하는 방법이 있습니까(내가 아는 한 sqlite의 쿼리 문에서는 불가능합니다) ?

예제에 표시된 대로:

#!/bin/ksh

IFS=','

input=(Red,Yellow is a color,Blue)

set -A array $input
print ${array[@]}
print ${array[0]}
print ${array[1]}
print ${array[2]}

위의 코드를 실행하면 다음과 같은 결과가 나타납니다: $ Red Yellow Red Yellow

다음과 같이 두 번째 요소를 따옴표로 묶으면:

#!/bin/ksh

IFS=','

input=(Red,"Yellow is a color",Blue)

set -A array $input
print ${array[@]}
print ${array[0]}
print ${array[1]}
print ${array[2]}

올바른 결과를 얻으실 수 있을 겁니다...

$
Red
Yellow is a color
Blue

내가 알아야 할 해결책은 두 번째 요소에 따옴표를 사용하지 않고 이 배열을 설정하는 방법이 있다는 것입니다. 아니면 배열에 삽입하기 전에 요소를 따옴표로 묶기 위해 데이터베이스 결과 반환을 전처리해야 합니까? 그렇다면 좋은 출발점은 무엇입니까? 가능하다면 ksh 내에 머물고 싶습니다.

답변1

다음은 mksh에서 작동합니다.

$ echo $KSH_VERSION
@(#)MIRBSD KSH R50 2014/10/07
$ x="Red,Yellow is a color,Blue"
$ oIFS=$IFS
$ IFS=,
$ y=($x)
$ IFS=$oIFS
$ echo ${y[1]}
Yellow is a color

나는 이것이 ksh의 모든 버전에서 동일한 방식으로 작동해야 한다고 믿습니다.

관련 정보