2010-07-08 5 views
14

я выполнить следующее Баш скрипт:Как использовать переменную Баш скрипт с СЭД

#!/bin/bash 
version=$1 
echo $version 
sed 's/\${version.number}/$version/' template.txt > readme.txt 

Я ожидаю, чтобы заменить все экземпляры $ {} version.number с содержимым переменной «версии» , Вместо этого вставляется буквальный текст $ version.

Что нужно сделать, чтобы sed использовало текущее значение версии $ вместо этого?

ответ

17
sed "s/\${version.number}/$version/" template.txt > readme.txt 

Только двойные кавычки заменяют знак доллара. Это также означает, что одиночные кавычки не требуют, чтобы знак доллара был экранирован.

+0

Но знак доллара должен быть экранирован, потому что выражение рассматривается как регулярное выражение 'sed'. Поэтому я думаю, что это должно быть '\\ $'. – Philipp

+1

@Philipp, фактически знак '$' является только привязкой, когда он является последним символом регулярного выражения (или, возможно, подвыражения). Но я признаю, что мне повезло. ;) Вы можете дополнительно добавить escape-косую черту, но тогда это '\\\ $'. –

+0

Спасибо за исправление. – Philipp

4

Вы также можете просто конец цитаты переменных

sed 's/'${version.number}'/'$version'/' template.txt > readme.txt 
+0

Это сработало лучше всего. – Val

0

Это немного старое, но все еще может быть полезно ... Для меня он работал, используя двойной побег, как сказал Филипп (и избежать скобки, если вы используете их ...):

#!/bin/bash 
LIVE_DB_NAME='wordpress'; 
STAGING='staging'; 
sed -r "s/define\('DB_NAME', '[a-zA-Z0-9]+'\);/define('DB_NAME', '\\${LIVE_DB_NAME}');/" ${STAGING}/wp-config.php >tmp1; 
Смежные вопросы