Похоже, что вы хотите, чтобы ссылки $MONTH
и $YEAR
были оценены, и хотя это выполнимо, вы столкнетесь с проблемой, что *
также будет оцениваться (например, *
заменяется именем каждого файла в текущем каталоге).
Кто-то другой может найти решение, если / как оценивать переменные, но не звездочку ... пока я собираюсь предложить другой подход ... то, что я обычно делаю, когда хочу передать переменные в шаблон * sql скрипт.
Первым шагом является переформатирование сценария шаблона с использованием имен в качестве заполнителей, которые также служат недопустимыми идентификаторами для механизма обработки данных (например, предотвращает запуск сценария шаблона в базе данных, если заполнители не были должным образом заменены). Что-то вроде:
$ cat query.sql
Select * from table where trans_month=MONTH and trans_Year=YEAR
Предполагая, что у нас есть текущие назначения переменных ...
$ YEAR=10 MONTH=2018
Теперь у вас есть несколько вариантов замены заполнителей MONTH
и YEAR
в зависимости от вашей оболочки (и версии) и ваших предпочтений для команд. Пара примеров:
# disable expansion of '*'
$ set -f
# let 'sed' replace place holders with variable values;
# make sure you use double quotes around the 'sed' patterns
# to ensure the variables are evaluated
$ x=$(sed "s/MONTH/${MONTH}/g ; s/YEAR/${YEAR}/g" query.sql)
# let's see what we got
$ echo "${x}"
Select * from table where trans_month=10 and trans_Year=2014
С bash
вы можете использовать замену процесса, если предпочитаете:
$ set -f
$ read x < <(sed "s/MONTH/${MONTH}/g ; s/YEAR/${YEAR}/g" query.sql)
$ echo "${x}"
Select * from table where trans_month=10 and trans_Year=2014