使这项工作有效的所有其他变量都经过测试并且工作正常,所以我显然做错了。
我有一个 bash 脚本,它首先选择一些 mysql 数据并存储到一个新变量中。
然后它继续再次连接并更新数据库。
title=$(mysql -u $user -p$pass -h $host dbname | SELECT post_title FROM wp_posts WHERE ID=$8);
mysql --host=$host --user=$user --password=$pass dbname <<EOF
UPDATE wp_my_music_lib SET title = "$title" WHERE track_id=${4}${6};
EOF
title
条目始终为空,这告诉我初始 SELECT 无法正常工作。还应该注意的是,从选择结果中预期的数据中有空格和特殊字符,即:
Some Artist (10/10/13)
我认为引用 var "$title"
可以解决任何潜在的吞噬问题,但这不是这里的问题,因为我尝试从不同的列中选择单个数字对象,并且也不起作用。
如果我对标题变量进行硬编码,它会按预期工作。
1)你能看出我做错了什么吗?
2)是否可以使用一个数据库连接来执行上述所有操作,因为这更有意义?
最佳答案
mysql | SELECT
将 mysql
的输出通过管道传输到名为 SELECT
的命令,这当然不是您想要的。
要通过 mysql
执行查询并捕获输出,您可以使用以下语法:
title=$(mysql -B dbname <<< "SELECT post_title FROM wp_posts WHERE ID=$8")
您还可以在子查询中执行SELECT
以避免多次调用mysql
:
mysql --host=$host --user=$user --password=$pass dbname <<EOF
UPDATE wp_my_music_lib SET title = (
SELECT post_title FROM wp_posts WHERE ID=$8)
WHERE track_id=${4}${6}
EOF
关于mysql - 无法选择某些 mysql 数据并将其存储到 bash 中的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925641/