2012-11-08 10 views
5

Gibt es einen Unterschied zwischen grep Muster in einfachen und doppelten Anführungszeichen?grep Muster einfache und doppelte Anführungszeichen

grep "abc" file.txt 

und

grep 'abc' file.txt 

Ich frage da es keine Art, wie ich alle möglichen Fälle auf meiner eigenen testen konnte, und ich möchte nicht in einem Fall stolpern, die ich falsch :)

Antwort

5

ich sehe einen Unterschied, wenn Sie Sonderzeichen haben:

Ex:

grep "foo$barbase" file.txt 

Die Shell wird versuchen, die Variable $barbase zu erweitern, das ist vielleicht nicht das, was Sie vorhatten.

Wenn Sie stattdessen

grep 'foo$barbase' file.txt 

$bar geben wird wörtlich genommen.

Schließlich bevorzugen Sie immer einfache Anführungszeichen, es ist stärker.

+1

Schließlich bevorzugen Sie immer einfache Anführungszeichen, es ist stärker. -> Sie meinen, einfache Anführungszeichen, oder? :) –

1
  • In doppelten Anführungszeichen, die folgenden Zeichen haben eine besondere Bedeutung: ‚$‘, ‚`‘,‚\‘, und, wenn die Geschichte Erweiterung aktiviert ist,‚!‘.

    Die Zeichen '$' und '’ retain their special meaning within double quotes ($ for variables and für die Ausführung).

    Die Sonderparameter '*' und '@' behalten ihre spezielle Bedeutung in doppelte Anführungszeichen als Eingaben, wenn sie von $ übernommen werden.

    '$', '`', '"', '\' oder Newline kann, müssen mit ein Backslash geschützt werden.

    Der Backslash behält seine besondere Bedeutung, wenn sie von '$' gefolgt, '`', '' ',' \ 'oder Newline. Backslashes vorangehende Zeichen ohne spezielle Bedeutung bleiben unverändert.

    Auch wird es hilfreich sein, Shell-Erweiterungen zu überprüfen:
    https://www.gnu.org/software/bash/manual/html_node/Shell-Expansions.html#Shell-Expansions

  • Einzel Zitat Shell-Erweiterungen ignorieren.
+0

Ein gutes Tutorial: https://en.wikibooks.org/wiki/Bash_Shell_Scripting – Zhenhua