Shell-Script
將 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
我需要知道的解決方案是,有沒有一種方法可以在第二個元素中不帶引號的情況下設置這個數組。或者是否需要對 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 中都應該以相同的方式工作。