2013-08-09 7 views
25

Próbuję użyć zmiennej w wyrażeniu grep. Po prostu opublikuję przykład awarii i być może ktoś zasugeruje, jak sprawić, by zmienna była oceniana podczas uruchamiania polecenia grep. Próbowałem również ${var}.zmienna powłoki w grep regex

$ string="test this" 
$ var="test" 
$ echo $string | grep '^$var' 
$ 

Ponieważ mój regex powinny odpowiadać linie, które zaczynają się od „test”, należy go wydrukować linia echem thru niego.

$ echo $string 
test this 
$ 
+3

Cóż, myślę, że zorientowali się, że działa z cudzysłowach. –

+1

Prawidłowe, podwójne cudzysłowy. Pamiętaj tylko, że w podwójnych cudzysłowach musisz uciec od ukośników odwrotnych i EOL '$'. – Kevin

+0

możliwy duplikat [Dodaj polecenie grep do skryptu bash] (http://stackoverflow.com/questions/5142729/add-grep-command-to-bash-script) – tripleee

Odpowiedz

33

Musisz użyć podwójnego cudzysłowu. Pojedyncze cytaty zapobiegają interpolacji zmiennej powłoki przez powłokę. Używa się pojedynczych cudzysłowów, aby uniemożliwić interpolację powłoki, co może być konieczne, jeśli wyrażenie regularne używane jest jako część wzorca. Możesz także użyć odwróconego ukośnika, aby podać a $, jeśli używasz podwójnych cudzysłowów.

Może być konieczne umieszczenie zmiennej w nawiasach klamrowych ${var}, aby oddzielić ją od reszty wzoru.

Przykład:

$ string="test this" 
$ var="test" 
$ echo $string | grep "^$var" 
+0

Gdzie są nawiasy klamrowe w przykładowym kodzie? – moejoe