Безопасность скрипта Bash с участием симметричного шифрования GPG

Самый простой способ добавить значение переменной оболочки в sed и не беспокоиться о том, как нужно будет изменить экранирование обратной косой черты для остальная часть вашего сценария sed заключается в том, чтобы поместить все в одинарные кавычки , кроме переменной, и поместить это в двойные кавычки.

Все следующие примеры кода предполагают: VALUE = 'foo \ ([az] \ + \)'

Следующий неработающий код не работает, потому что переменная VALUE не раскрывается:

sed 's/"${VALUE}"/foo happy \1/' test.txt

Следующий неработающий код не работает, потому что обратная косая черта на \ 1 съедается оболочкой (потому что она заключена в двойные кавычки, а не в одинарные) перед sed когда-либо видит это:

sed "s/${VALUE}/foo happy \1/" test.txt

Следующий код работает, как ожидалось:

sed 's/'"${VALUE}"'/foo happy \1/' test.txt

Следующий код также работает:

sed "s/${VALUE}/foo happy \\1/" test.txt

То же самое:

sed s/"${VALUE}"/foo\ happy\ \\1/ test.txt

Но зачем усложнять? Одиночные кавычки вокруг сценария sed делают все намного понятнее, особенно для гуру, не связанного со сценариями оболочки, читающего ваш код. Мой любимый способ - снова отказаться от одинарных кавычек до двойных кавычек только для расширения переменной и сразу вернуться к одинарным кавычкам:

sed 's/'"${VALUE}"'/foo happy \1/' test.txt
4
19.09.2018, 13:30
0 ответов

Теги

Похожие вопросы