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