我正在查询 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 中都应该以相同的方式工作。