14

我的脚本需要将查询结果存储在一个结构中:

 #!/bin/bash
 user="..."
 psw="..."
 database="..."
 query="select name, mail from t"
 customStructure=$(mysql -u$user -p$psw $database -e "$query";)

我不知道如何存储查询结果中的 {name, mail} 数组。

我需要这样的结构:

 array=[ [name1,mail1] , [name2,mail2], ....., [nameN, mailN] ]

有没有办法在 bash 中做到这一点?

4

2 回答 2

17

Bash 数组的初始化如下:

myarray=("hi" 1 "2");

要将命令输出的各个部分捕获到数组中,我们必须遍历输出,将其结果添加到数组中。可以这样做:

for i in `echo "1 2 3 4"`
do
    myarray+=($i)
done

在您的示例中,您似乎希望获取 MySQL 命令的输出并将其输出行的部分存储到子数组中。我将向您展示如何将行捕获到数组中,并且鉴于此,您应该能够弄清楚如何自己将子数组放入其中。

while read line
do 
    myarray+=("$line")
done < <(mysql -u${user} -p${psw} ${database} -e "${query}")

还值得一提的是,对于这种不需要输出元数据(例如漂亮的格式和表名)的 MySQL 操作,您可以使用 MySQL 的-B选项进行“批量输出”。

于 2012-12-12T16:30:33.560 回答
3

可以通过read -a命令访问字段级记录,并将IFS其设置为空字符串以防止读取从行中剥离前导和尾随空格。

#!/bin/bash
user="..."
psw="..."
database="..."
query="select name, mail from t"

OIFS="$IFS" ; IFS=$'\n' ; oset="$-" ; set -f

while IFS="$OIFS" read -a line 
do 
  echo ${line[0]}   
  echo ${line[1]}   
done < <(mysql  -u${user} -p${psw} ${database} -e "${query}")
于 2015-06-12T08:32:22.023 回答