如何在bash中转义mysqldump引号?

时间:2016-12-05 17:11:06

标签: mysql bash

我需要使用mysqldump工具备份我的数据库。 我的测试表有一个TIMESTAMP列,我必须将其用作过滤器。 我使用带有以下代码的bash脚本:

#!/bin/bash
cmd="mysqldump --verbose --opt --extended-insert --result-file /home/backups/mysql/test/test_table.20161205.bak test --where=\"timestamp_c>='2016-12-03 00:00:00'\" --tables \"test_table\""
echo $cmd
$cmd

我正在打印我认为应该工作的命令。上面的脚本生成输出:

mysqldump --verbose --opt --extended-insert --result-file /home/backups/mysql/test/test_table.20161205.bak test --where="timestamp_c>='2016-12-03 00:00:00'" --tables "test_table"

如果我在终端上复制打印的命令,它可以工作; 但是,脚本上的命令会打印错误:

mysqldump: Couldn't find table: "00:00:00'""

有什么东西让我不理解引号逃脱吗?

2 个答案:

答案 0 :(得分:2)

变量保存数据,而不是代码。改为定义一个函数。

cmd () {
  mysqldump --verbose --opt --extended-insert \
            --result-file /home/backups/mysql/test/test_table.20161205.bak test \
            --where="timestamp_c>='2016-12-03 00:00:00'" \
            --tables "test_table"
}

答案 1 :(得分:-1)

尝试使用'eval'执行命令。例如:

#!/bin/bash
cmd="mysqldump --verbose --opt --extended-insert --result-file /home/backups/mysql/test/test_table.20161205.bak test --where=\"timestamp_c>='2016-12-03 00:00:00'\" --tables \"test_table\""
eval $cmd