【问题标题】:Bash script and rowsBash 脚本和行
【发布时间】:2013-02-02 15:51:25
【问题描述】:

我的问题是行 mysql_query。 我需要:

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

【问题讨论】:

  • 我不明白你为什么要在for 循环中分配fieldAfieldB;如果您希望它们包含每条记录的某些部分,则不应将整个记录分配给它们。

标签: mysql arrays bash


【解决方案1】:

问题是您将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")

【讨论】:

  • 但是,当任何字段为空时怎么办?我有: ('aaao-230-27910', 1, 101, '0', '18435', ,);我要:('','aaao-230-27910', 1, 101, '0', '18435');
  • 我使用它:同时读取 fieldA fieldB fieldC fieldD fieldF fieldG fieldH fieldI fieldJ$ ... do echo "$INS1 $fieldA, '$fieldB', '$fieldC', $fieldD, $ fieldE, $fieldF, $field$ ... done
  • 我在最后一个字段有问题。我有两个字段(0 和 23654):...1, 101, 0 23654);
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 2013-10-10
  • 2017-11-04
  • 2017-01-11
  • 2017-06-10
相关资源
最近更新 更多