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;'
答案 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