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

荒谬

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

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

关闭后进行编辑以重复。

反引号同样是单引号我觉得不行。

那个人

这与您的反引号无关,完全是由于单引号引起的。有关如何在单引号字符串中使用变量的信息,请参见此问题这是根据该问题修正的示例:

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循环的行进行读取并以明确的形式显示db名称进行了总体改进

while IFS= read -r db
do
  printf 'Processing: %q\n' "$db"
  LC_ALL=C sed -n '/^-- Current Database: `'"$db"'`/,/^-- Current Database: `/p' mysqldump.sql > "$db.sql"
done < file_with_databasesnames.txt

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章