Включение строковых выражений в команды bash - PullRequest
0 голосов
/ 10 июля 2009

Как включить строку с выражением в команду в скрипте 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 ]

3 голосов
/ 10 июля 2009

Переменные окружения (и другие специальные символы) не раскрываются внутри строк в одинарных кавычках. Один в выражении echo таков, потому что сама строка ограничена двойными кавычками. Одиночные кавычки в этой строке являются частью строки, а не разделителями.

Посмотрите, что говорится в руководстве по bash о цитировании.

2 голосов
/ 11 июля 2009

Используйте двойные кавычки вместо одинарных.

mysql -e 'SHOW DATABASES' | grep -E -v "$exclusions" > outfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...