为什么mysql命令不能被shell中的字符串替换?

时间:2015-08-02 12:15:29

标签: mysql shell

mysql -u root -ppasswd -e"use test_db;"

该命令可以在shell控制台中运行,无需进入mysql控制台。

为什么以下两行不能在shell控制台中运行?

str="use test_db;"
mysql -u root -ppasswd -e$str;


ERROR 1049 (42000): Unknown database 'test_db;'

2 个答案:

答案 0 :(得分:2)

这里的问题是shell正在拆分你的字符串,所以你的命令最终是这样的:

mysql -u root -ppasswd -euse test_db;

test_db;被解释为一个单独的参数,即数据库的名称。

要解决此问题,请使用引号:

str="use test_db;"
mysql -u root -ppasswd -e"$str"

我删除了分号,因为您似乎已经指定了两次分号。对于一个命令,我根本不认为你需要它,但我想你的脚本实际上会比这更复杂。

顺便说一句,你可以通过指定一个数据库跳过use db_name命令(就像你偶然做的那样):

str="select col1, col2 from table"
mysql -u root -ppasswd -e"$str" test_db

答案 1 :(得分:1)

因为shell拆分你的字符串str。 你应该这样写:

mysql -u root -ppasswd -e"$str"

或者你会得到这个:

mysql -u root -ppasswd -euse test_db