2013-07-04 18 views
6

I muszą używać sed w skrypcie bash, na dodatek linie po każdej Numer linii skryptu z jakiejś pary wartości (poniżej pracy)Rozwiń zmienne w sed

sed -i.bak '14i\some_text=some_text' file 

Ale muszę na bash skryptu (sh) dla rozwiń zmienne (poniżej nie działa)

sed -i.bak '$number_linei\$var1=$var2' $var3 

Odpowiedz

10

Wystarczy użyć podwójnych cudzysłowów zamiast pojedynczych cudzysłowów. Będziesz także musiał użyć {}, aby poprawnie zdefiniować zmienną number_line i również uciec przed \.

sed -i.bak "${number_line}i\\$var1=$var2" $var3 

bym osobiście wolę, aby zobaczyć wszystko zmiennych użyć {}, kończący się z czymś takim:

sed -i.bak "${number_line}i\\${var1}=${var2}" ${var3} 
+0

Wiele czołgów. Trochę mylą dla mnie ucieczkę. Pracuj dla mnie – abkrim

1

Zmień apostrofów aby cudzysłowach:

man bash:

Enclosing characters in single quotes preserves the literal value of 
    each character within the quotes. 

    Enclosing characters in double quotes preserves the literal value of 
    all characters within the quotes, with the exception of $, `, \, and, 
    when history expansion is enabled, !. The characters $ and ` retain 
    their special meaning within double quotes. 
+0

konieczne, ale nie wystarczające, aby naprawić problem, PO jest. –

+0

Nieco mylić dla mnie. Jeśli postawiono pytanie, to dlatego, że wypróbowałem kilka opcji. "", "" i nie "działają dla mnie. Po przeczytaniu pierwszej odpowiedzi poproś burmistrza o informacje i będę mógł kontynuować moją pracę. – abkrim

+0

@AbdelKarimMateosSanchez Możesz zaznaczyć najwyższą odpowiedź jako [przyjęta] (http://meta.stackexchange.com/a/5235/181223). –