Mysql Bash for循环:Backticks

Mysql Bash for循环:Backticks,mysql,bash,backticks,Mysql,Bash,Backticks,我有这个密码 $db=test-1 for T in `mysql -u$dbUser -p$dbPass -N -B -e 'show tables from '$db`; do count=$((count+1)) mysqldump --skip-comments --compact --skip-lock-tables -u$dbUser -p$dbPass $db $T > $GIT_MYSQL/$T.sql done done; 它给了我这个错误 第1行出现错误1064(42

我有这个密码

$db=test-1
for T in `mysql -u$dbUser -p$dbPass -N -B -e 'show tables from '$db`;
do
count=$((count+1))
mysqldump --skip-comments --compact --skip-lock-tables -u$dbUser -p$dbPass $db $T > $GIT_MYSQL/$T.sql
done
done;
它给了我这个错误

第1行出现错误1064(42000):SQL语法中有错误;请查看与MySQL服务器版本对应的手册,以了解第1行的'-1'附近使用的正确语法


如何解决此问题?

您没有正确声明数据库名称变量。尝试这样做:

$db=test-1
echo "My database is called $db"
将输出与此进行比较:

db=test-1
echo "My database is called $db"
考虑到上面的评论和适当的(我希望)引用,您这样的脚本应该可以工作:

dbUser="user"
dbPass="pass"
db="test-1"
for T in $(mysql -u "$dbUser" -p"$dbPass" -N -B -e "show tables from $db")
do
    mysqldump --skip-comments --compact --skip-lock-tables -u "$dbUser" -p"$dbPass" "$db" "$T" > "$GIT_MYSQL/$T.sql"
done

您没有正确声明数据库名称变量。尝试这样做:

$db=test-1
echo "My database is called $db"
将输出与此进行比较:

db=test-1
echo "My database is called $db"
考虑到上面的评论和适当的(我希望)引用,您这样的脚本应该可以工作:

dbUser="user"
dbPass="pass"
db="test-1"
for T in $(mysql -u "$dbUser" -p"$dbPass" -N -B -e "show tables from $db")
do
    mysqldump --skip-comments --compact --skip-lock-tables -u "$dbUser" -p"$dbPass" "$db" "$T" > "$GIT_MYSQL/$T.sql"
done

$db
1)后面缺少一个引号
'
)。Bash backtick语法已被弃用,容易出现打字错误和误读,并且不能嵌套。(在评论中加上这样的话是很痛苦的)。考虑使用<代码> $(…)< /代码>语法。2). 您通常应该在参数扩展周围使用双引号,以防止分词等。有关详细信息,请参阅。您可能也会发现这很有帮助。您所说的
$db=test-1
是什么意思?我本以为是
db=$((test-1))
或类似的。祝你好运。$db=“test-1”如果test-1是数据库的名称,那么在
mysql-u$dbUser-p$dbPass-N-B-e'中显示来自“$db”的表。就像Jaco所说的,在
$db
1)之后有一个“缺失。有一个单引号
缺失。Bash backtick语法已被弃用,容易出现打字错误和误读,并且不能嵌套。(在评论中加上这样的话是很痛苦的)。考虑使用<代码> $(…)< /代码>语法。2). 您通常应该在参数扩展周围使用双引号,以防止分词等。有关详细信息,请参阅。您可能也会发现这很有帮助。您所说的
$db=test-1
是什么意思?我本以为是
db=$((test-1))
或类似的。祝你好运。$db=“test-1”如果test-1是数据库的名称,那么在
mysql-u$dbUser-p$dbPass-N-B-e'中显示来自“$db”的表。就像Jaco说的,有一个“失踪”。