mysqldump - 在shell脚本中不起作用

时间:2018-03-26 09:53:37

标签: mysql shell

我在shell脚本中编写mysqldump命令,如下所示(简化示例)

command="mysqldump -v -uuser -ppass base1 table1 --where=\"id=1 or id=2\""

当我回显命令

echo $command

在shell脚本中它返回正确的mysqldump命令

mysqldump -v -uuser -ppass base1 table1 --where="id=1 or id=2"

我可以复制并运行,效果很好。

当我尝试从shell脚本内部运行它时

$command

它似乎没有给命令传递引号,因此无法执行条件转储,说

mysqldump: Couldn't find table: "or"

如果--where属性不包含空格,则它在shell脚本中工作。我曾尝试使用单引号,反引号,逃脱。

1 个答案:

答案 0 :(得分:1)

您的command变量包含正确的命令以及echo $command显示此命令。但是因为--where的参数包含空格,所以当$command被计算时,这些空格会使shell以不同于你想象的方式解析命令行。

解决方案很简单。如果您已在command变量中将命令行编写为字符串,请使用eval internal shell command执行它:

eval $command