如何在反引号内传递bash变量

时间:2018-07-02 19:48:34

标签: bash macos sed

首先,对我的英语感到抱歉,因为我不知道“ `”(反引号)的正确名称

在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.

在关闭后进行重复编辑。

反引号单引号一样吗?我想不。

1 个答案:

答案 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