将 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 中都应该以相同的方式工作。

相关内容