mysqldump - 在shell脚本中不起作用

问题描述 投票:1回答:1

我在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脚本中工作。我曾尝试使用单引号,反引号,逃脱。

mysql shell
1个回答
1
投票

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

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

eval $command
© www.soinside.com 2019 - 2024. All rights reserved.