我在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脚本中工作。我曾尝试使用单引号,反引号,逃脱。
你的command
变量包含正确的命令运行,echo $command
显示了这一点。但是因为--where
的参数包含空格,所以当$command
被评估时,这些空格会使shell以不同于你想象的方式解析命令行。
解决方案很简单。如果您在command
变量中将命令行组合为字符串,请使用eval
internal shell command执行它:
eval $command