在bash命令中包含字符串表达式

时间:2009-07-10 18:59:05

标签: bash

如何在bash脚本中的命令中包含带表达式的字符串?

请考虑以下事项:

#!/bin/bash
exclusions='Database|information_schema|mysql'
echo "mysql -e 'SHOW DATABASES' | grep -E -v '$exclusions' > outfile"
mysql -e 'SHOW DATABASES' | grep -E -v '$exclusions' > outfile

脚本打印到屏幕:

mysql -e 'SHOW DATABASES' | grep -E -v 'Database|information_schema|mysql' > outfile

...所以我认为我的语法正在生成我想要的命令字符串。当我在命令行手动输入打印的字符串时,该命令将所有数据库名称(除grep表达式中的名称除外)放入“outfile”。

但是脚本会将所有数据库名称导出到文件中,而不会将grep表达式中的那些名称排除。为什么脚本会忽略grep表达式?

2 个答案:

答案 0 :(得分:3)

环境变量(和其他特殊字符)不会在单引号字符串中展开。 echo语句中的那个是,因为字符串本身是由双引号分隔的。该字符串中的单引号是字符串的一部分,而不是分隔符。

查看bash manual关于引用的内容。

答案 1 :(得分:2)

使用双引号而不是单引号。

mysql -e 'SHOW DATABASES' | grep -E -v "$exclusions" > outfile