如何在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表达式?
答案 0 :(得分:3)
环境变量(和其他特殊字符)不会在单引号字符串中展开。 echo语句中的那个是,因为字符串本身是由双引号分隔的。该字符串中的单引号是字符串的一部分,而不是分隔符。
查看bash manual关于引用的内容。
答案 1 :(得分:2)
使用双引号而不是单引号。
mysql -e 'SHOW DATABASES' | grep -E -v "$exclusions" > outfile