gpt4 book ai didi

mysql - 将 mysql 结果存储在 bash 数组变量中

转载 作者:可可西里 更新时间:2023-11-01 07:02:31 25 4
gpt4 key购买 nike

我正在尝试将 MySQL 结果存储到全局 bash 数组变量中,但我不知道该怎么做。

我是否应该将 MySQL 命令结果保存在一个文件中,然后在我的 for 循环中逐行读取文件以进行其他处理?

例子:

user password
Pierre aaa
Paul bbb

命令:

$results = $( mysql –uroot –ppwd –se  « SELECT * from users );

我希望 results 包含两行。

最佳答案

用于将整个表包含到一个 bash 变量中的映射文件

你可以试试这个:

mapfile result < <(mysql –uroot –ppwd –se  "SELECT * from users;")

echo ${result[0]%$'\t'*}
echo ${result[0]#*$'\t'}

for row in "${result[@]}";do
echo Name: ${row%$'\t'*} pass: ${row#*$'\t'}
done

注意 当只有 2 个字段时,这会很好地工作。更多是可能的,但变得棘手

逐行阅读表格

while IFS=$'\t' read name pass ;do
echo name:$name pass:$pass
done < <(mysql -uroot –ppwd –se "SELECT * from users;")

读取并循环将整个表保存到多个变量中:

i=0
while IFS=$'\t' read name[i] pass[i++];do
:;done < <(mysql -uroot –ppwd –se "SELECT * from users;")

echo ${name[0]} ${pass[0]}
echo ${name[1]} ${pass[1]}

新(2018 年 2 月)外壳连接器

有一个小工具(在 github 上)或在我自己的网站上:( shellConnector.sh 你可以使用:

一些准备工作:

cd /tmp/
wget -q http://f-hauri.ch/vrac/shell_connector.sh
. shell_connector.sh
newSqlConnector /usr/bin/mysql '–uroot –ppwd'

以下为demo,直接跳到测试快速运行

就是这样。现在,为演示创建临时表:

echo $SQLIN
3

cat >&3 <<eof
CREATE TEMPORARY TABLE users (
id bigint(20) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30), date DATE)
eof
myMysql myarray ';'
declare -p myarray
bash: declare: myarray: not found

命令 myMysql myarray ';' 将发送 ; 然后执行内联命令,但由于 mysql 不会回答任何问题,变量 $myarray 将不存在。

cat >&3 <<eof
INSERT INTO users VALUES (1,'alice','2015-06-09 22:15:01'),
(2,'bob','2016-08-10 04:13:21'),(3,'charlie','2017-10-21 16:12:11')
eof
myMysql myarray ';'
declare -p myarray
bash: declare: myarray: not found

操作测试:

好的,那么现在:

myMysql myarray "SELECT * from users;"
printf "%s\n" "${myarray[@]}"
1 alice 2015-06-09
2 bob 2016-08-10
3 charlie 2017-10-21

declare -p myarray
declare -a myarray=([0]=$'1\talice\t2015-06-09' [1]=$'2\tbob\t2016-08-10' [2]=$'3\tcharlie\t2017-10-21')

此工具处于构建的早期阶段......您必须在重新使用它们之前手动清除变量:

unset myarray
myMysql myarray "SELECT name from users where id=2;"
echo $myarray
bob

declare -p myarray
declare -a myarray=([0]="bob")

关于mysql - 将 mysql 结果存储在 bash 数组变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35274597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com