2013-02-18 108 views
3

我的问题是行mysql_query。 我需要:Bash脚本和行

Record 0: 2,text is text,3.23 

但我有:

Record 0: 2 
Record 1: text 
Record 2: is 
Record 3: text 
Record 4: 3.23 

请帮助我。

results=($(mysql --user root -proot test -Bse "select id,name from Object")); 

cnt=${#results[@]} 

for ((i=0 ; i<${cnt} ; i++)) 
do 
    echo "Record No. $i: ${results[$i]}" 

    fieldA=${results[0]}; 
    fieldB=${results[1]}; 

done 
+0

我不明白你为什么要指定'fieldA'和'fieldB'了'for'循环内;如果您希望那些包含每条记录的某些部分,则不应将整个记录分配给它们。 – 2013-02-18 09:04:10

回答

6

问题是您正在将mysql的输出存储到数组中。现在,如果mysql返回多条记录,则不会知道记录什么时候结束,并且下一个记录会启动,因为该数组将包含“展平”数据。 (record1_fieldA record1_fieldB record2_fieldA record2_fieldB ...)

相反,使用while循环遍历记录是这样的:

i=0 
while read fieldA fieldB 
do 
    echo "Record $((i++)): fieldA: $fieldA fieldB: $fieldB" 
done < <(mysql --user root -proot test -Bse "select id,name from Object") 
+0

+1你是对的,我删除了我的答案 – 2013-02-18 09:26:23

+0

但是,什么时候有什么字段是空的?我有: ('aaao-230-27910',1,101,'0','18435',,); 我想: ('','aaao-230-27910',1,101,'0','18435'); – Unmerciful 2013-02-18 10:31:58

+0

我使用它: while read fieldA fieldB fieldC fieldD fieldE fieldF fieldG fieldH fieldI fieldJ $ ... do echo“$ INS1 $ fieldA,'$ fieldB','$ fieldC',$ fieldD,$ fieldE,$ fieldF,$ field $ ... done <(mysql --user root -pnorbert test -Bse“select id,name,description,.... – Unmerciful 2013-02-18 10:35:41