2012-11-08 9 views
5

Czy istnieje jakaś różnica pomiędzy załączaniem wzorów grep w pojedynczym i podwójnym cudzysłowie?Wzór grep pojedynczy i podwójny cudzysłów

grep "abc" file.txt 

i

grep 'abc' file.txt 

Pytam, ponieważ nie ma sposobu, mogę przetestować wszystkie możliwe przypadki, na własną rękę, a ja nie chcę wpaść w przypadku, że dostanę źle :)

Odpowiedz

5

widzę różnicy, czy masz znaki specjalne:

Ex:

grep "foo$barbase" file.txt 

Powłoka będzie próbować rozszerzyć zmienną $barbase, być może nie jest to, co zamierzałeś zrobić.

Jeśli zamiast wpisać

grep 'foo$barbase' file.txt 

$bar jest brane dosłownie.

Wreszcie, zawsze preferuj pojedyncze cudzysłowy domyślnie, jest silniejsze.

+1

Wreszcie, zawsze preferuj proste cytaty domyślnie, to jest silniejsze. -> Masz na myśli pojedyncze cytaty, prawda? :) –

1
  • w podwójny cudzysłów, następujących znaków ma specjalne znaczenie: „$”, „`”,„\”, a gdy interpretacja historii jest włączone,„!”.

    Znaki "$" i "’ retain their special meaning within double quotes ($ for variables and do wykonania).

    Specjalne parametry "*" i "@" zachowują swoje specjalne znaczenie w podwójnych cudzysłowów jako danych wejściowych po wprowadzeniu przez $.

    „$”, „`”„"”, «\» lub nowej linii można uciec poprzedzając je odwrotny ukośnik.

    Odwrotny ukośnik zachowuje swoje szczególne znaczenie, gdy następuje «$», ",", "" "," \ "lub znak nowej linii. Ukośniki poprzedzające znaki bez specjalnego znaczenia pozostają niezmienione.

    Także to będzie pomocne, aby sprawdzić rozszerzenia powłoki:
    https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html#Shell-Expansions

  • pojedynczy cytat ignorować rozszerzenia powłoki.
+0

Dobry samouczek: https://en.wikibooks.org/wiki/Bash_Shell_Scripting – Zhenhua