
Ich versuche, den -F
Parameter zu verwenden grep
, um eine PHP-Variable abzugleichen. Wenn ich Folgendes ausführe:
grep -F "$_SESSION['index']" -ri .
obwohl es nur übereinstimmt:
['index']
Wie kann ich erreichen, dass es auch mit übereinstimmt $_SESSION
? Wird das $_SESSION
als nicht vorhandene Umgebungsvariable gelesen und das grep
als ['index']
? Ich dachte, das -F
würde dafür sorgen, dass es als einfacher Text gelesen wird, aber vielleicht schaltet das einfach das Regex-Verhalten ab.
Wenn das das Verhalten ist, wie kann ich das tun? Ich kann keine einfachen Anführungszeichen für die Kapselung verwenden, da PHP dafür einfache verwendet; das Escapen schlägt in der Shell fehl:
grep -F '$_SESSION[\'index\']' -ri .
Antwort1
grep -F
vermeidet keine Shell-Analyse.
Escapen Sie das Dollarzeichen innerhalb von Anführungszeichen:
grep -F "\$_SESSION['index']" -ri .
Einfache Anführungszeichen können alles außer anderen einfachen Anführungszeichen enthalten – es gibt kein Escape-Zeichen. Die zitierte Zeichenfolge kann jedoch mit Escape-Anführungszeichen verkettet werden:
grep -F '$_SESSION['\''index'\'']' -ri .
Antwort2
Sie können auch mehrere unterschiedlich zitierte Abschnitte zu einem Wort zusammenfügen. In diesem Fall:
grep -F '$_SESSION'"['index']" -ri .