首先,对我的英语感到抱歉,因为我不知道“ `”(反引号)的正确名称
在SQL转储文件上,我需要在数据库转储中提取块,所有数据库均以下面的代码开头,而他的sql转储以其他数据库的下一个块结尾,
--
-- Current Database: `current_database`
--
// some sql code
--
-- Current Database: `next_database`
--
for d in $(cat file_with_databasesnames.txt);do echo $d;LC_ALL=C sed -n '/^-- Current Database: `database_name`/,/^-- Current Database: `/p' mysqldump.sql > $d.sql
在代码上,我需要传递$ d的值而不是database_name
我尝试了几种方法,但都失败了。
`${d}`
`$d`
\`$d\`
我使用
bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.
在关闭后进行重复编辑。
反引号和单引号一样吗?我想不。
答案 0 :(得分:1)
这与您的反引号无关,完全是由于您的单引号。有关如何在单引号引起来的字符串中使用变量的信息,请参见this question。这是根据该问题修正的示例:
begindate
下面是一个显示其正常工作的示例:
for d in $(cat file_with_databasesnames.txt)
do
echo $d;
LC_ALL=C sed -n '/^-- Current Database: `'"$d"'`/,/^-- Current Database: `/p' mysqldump.sql > $d.sql
done
这是一个版本,该版本对$ cat file_with_databasesnames.txt
mytarget
$ cat mysqldump.sql
-- Current Database: `users`
Some dump here
-- Current Database: `mytarget`
This is what you want
-- Current Database: `etc`
And so on
$ for d in $(cat file_with_databasesnames.txt)
do
echo $d;
LC_ALL=C sed -n '/^-- Current Database: `'"$d"'`/,/^-- Current Database: `/p' mysqldump.sql > $d.sql
done
mytarget
$ cat mytarget.sql
-- Current Database: `mytarget`
This is what you want
-- Current Database: `etc`
循环中的读取行进行了总体改进,并以明确的形式显示数据库名称:
while read