
Я пытаюсь использовать -F
параметр grep
для сопоставления переменной PHP. Когда я запускаю:
grep -F "$_SESSION['index']" -ri .
хотя это только соответствие:
['index']
Как мне сделать так, чтобы он также соответствовал $_SESSION
? $_SESSION
Читается ли как несуществующая переменная среды, а читается grep
как ['index']
? Я думал, что -F
заставит его читаться как обычный текст, может быть, это просто отключает поведение регулярных выражений.
Если это поведение, как мне это сделать? Я не могу использовать одинарные кавычки для инкапсуляции, потому что PHP использует одинарные для своего; экранирование не удается в оболочке:
grep -F '$_SESSION[\'index\']' -ri .
решение1
grep -F
не избегает анализа оболочки.
Внутри двойных кавычек экранируйте знак доллара:
grep -F "\$_SESSION['index']" -ri .
Одинарные кавычки могут содержать что угодно, кроме других одинарных кавычек — экранирующего символа нет — однако заключенную в кавычки строку можно объединить с экранированными кавычками:
grep -F '$_SESSION['\''index'\'']' -ri .
решение2
Вы также можете соединить несколько по-разному цитируемых разделов вместе, чтобы получилось одно слово. В этом случае:
grep -F '$_SESSION'"['index']" -ri .