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

次のように2番目の要素を引用符で囲むと:

#!/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

私が知る必要がある解決策は、2番目の要素に引用符を使用せずにこの配列を設定する方法があることです。それとも、配列に挿入する前に要素を引用符で囲むためにデータベース結果の戻りを前処理する必要がありますか?それでは、良い出発点は何ですか?可能であれば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のすべてのバージョンで同じように動作するはずだと思います。

関連情報