2016-07-08 4 views
2

sqlite3の出力を/ n区切りのbash配列に読み込もうとしています。 単純なことだと思われますが、read文は出力を生成しないようです。 IFS文の直前にfqryをエコーすると、sqliteクエリがその出力を文字列に正しくロードしていることが確認されます。しかし、まったくまったく何の問題もないようです。sqlite出力をbash配列に移動する

cmd="SELECT * FROM format" 
fqry=`sqlite3 data.db "$cmd"` 
IFS=$'\n' 
read -ra farray <<< "$fqry" 
for f in "${farray[@]}" 
do 
echo "$f" 
done 

答えて

2

代わりreadのインデックス付き配列を作成するために使用する化合物の配列の割り当て:

cmd="SELECT * FROM format" 
IFS=$'\n' 
fqry=(`sqlite3 data.db "$cmd"`) 

for f in "${fqry[@]}"; do 
    echo "$f" 
done 
+0

完全に動作します。ありがとう! – kwksdy

+0

エントリに改行が含まれている場合はどうなりますか? – Blauhirn

+0

@Blauhirnその後、bashを使用すると複雑になります。使用している出力ラインセパレータやIFSに関係なく、dbにも表示されないという保証はありません。最も安全な方法は、(... LIMITを使用して)行数をカウントし、各ラインのためのクエリを実行することですが、それは明らかな欠点があり、アトミックではありません...私はおそらくだけではなく、パイソンを使用すると思います。 – mata

1

はあなたが示すために、むしろデフォルトの改行文字\nよりも、別のDELIMを定義するread -dオプションを使用する必要があります入力行の終了、

read -d '' -ra farray <<< "$fqry" 
+0

これも完全に動作します。ありがとう! – kwksdy

関連する問題