Итак, у меня есть некоторые файлы, содержащие значения заполнителя, такие как @[email protected]
или @[email protected]
(имена переменных all-caps, заключенные в @, представляющие имена переменных среды). Я хочу, чтобы заменить эти заполнители фактическими значениями переменных, которые они ссылаются.Как обрабатывать переменные в bash?
В прошлом, когда я видел такого рода вещи сделано, конкретные переменные, как правило, жестко, например:
sed -e 's/@[email protected]/$SOME_VALUE/' <infile >outfile
Но это не будет работать для моего текущего потребительной случае, как я хотят более гибко поддерживать произвольные замены. Я написал этот код в Python, который делает именно то, что я хочу:
import re
import fileinput
from os import environ
from sys import stdout
pat = re.compile(r'@([A-Z_]+)@')
for line in fileinput.input():
stdout.write(pat.sub(lambda match: environ[match.group(1)], line))
Но я предпочел бы не использовать Python, если я могу помочь ему. Конечно, есть ли способ сделать это с помощью perl или sed one-liner?
Есть ли способ, чтобы сделать Perl жаловаться, если переменная не определена? Было бы лучше, чем молча оставить пробелы в моем файле, если мои env vars установлены неправильно. – robru
@Robru обновлено с предложением – hobbs
статус отказа от 'die' должен быть достаточным, чтобы выпустить' make'. – hobbs