我的脚本需要在结构中存储查询结果:
#!/bin/bash
user="..."
psw="..."
database="..."
query="select name, mail from t"
customStructure=$(mysql -u$user -p$psw $database -e "$query";)
我不知道如何存储查询结果中的{名称,邮件}数组。
我需要这样的结构:
array=[ [name1,mail1] , [name2,mail2], ....., [nameN, mailN] ]
有没有办法在 bash 中做到这一点?
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
选项进行"批量输出"。
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}")