次のように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のすべてのバージョンで同じように動作するはずだと思います。