【问题标题】:Escaping curly braces in shell script在 shell 脚本中转义花括号
【发布时间】:2017-09-29 05:47:54
【问题描述】:

我有一个脚本可以转储我的数据库,如下所示:

#!/usr/bin/env sh

PATH=/usr/bin:/bin
LOG="mybackup/log/backup_$(date +%Y-%m-%d_%H:%M:%S).log"

# some other command

# backup mysql database
echo "Backing up database" > ~/$LOG
mysqldump -u myusername -pmypassword --ignore-table={db1.table1,db1.table2,db1.table3,db1.table4} db1 -r ~/mybackup/db/db1_$(date +%Y-%m-%d_%H:%M:%S).sql >> ~/$LOG 2>&1

# some other command

当我在终端中运行该命令时,它成功转储了我的数据库而没有忽略表。但是当我通过脚本运行命令时,它会转储数据库中的所有表。

我试图避开花括号:

mysqldump -u myusername -pmypassword --ignore-table=\{db1.table1,db1.table2,db1.table3,db1.table4\} db1 -r ~/mybackup/db/db1_$(date +%Y-%m-%d_%H:%M:%S).sql

但它仍然会转储所有表格。

我的问题是如何在 shell 脚本中正确地转义大括号/方括号?

【问题讨论】:

  • 从记忆中,所以我不会在官方答案中做出,多次指定这个选项更容易。文档说“要忽略多个表,请多次使用此选项”
  • 愚蠢的事情(再次从记忆中)可能会像 \\{\\} 一样逃避脚本的转义

标签: mysql shell escaping curly-braces


【解决方案1】:

我无法回答为什么它可以在命令行上工作,但文档说要多次使用该选项:

mysqldump --ignore-table documentation

man mylsqdump

--ignore-table=db_name.tbl_name

不要转储给定的表,它必须同时使用 数据库和表名。要忽略多个表,请使用此选项 多次。此选项也可用于忽略视图。

【讨论】:

  • 我在某处读到可以使用大括号忽略多个表,并且在我尝试时它可以工作。也许我应该坚持手动并多次使用--ignore-table。谢谢
猜你喜欢
  • 2013-10-17
  • 1970-01-01
  • 2022-10-17
  • 1970-01-01
  • 2015-11-23
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多