Shell-Script

將 sqlite db 的輸出處理為帶有空格的 ksh 數組

  • March 5, 2015

我正在查詢一個 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

我需要知道的解決方案是,有沒有一種方法可以在第二個元素中不帶引號的情況下設置這個數組。或者是否需要對 db 結果返回進行預處理以在插入數組之前用引號封裝元素。如果是這樣,什麼是一個好的起點?如果可以的話,我想留在 ksh 內。

以下在 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 中都應該以相同的方式工作。

引用自:https://unix.stackexchange.com/questions/188202