Основная проблема в том, что вы не цитируете аргумент, передаваемый grep.Единственное, что нужно экранировать, это \ $ (если в двойных кавычках) и [].Если вам нужна точная строка (без использования регулярных выражений), просто используйте fgrep (grep -F), который выполняет точное совпадение строк:
grep -F "\$server['fish_stick']"
Работает в моей системе:
$ foo="\$server['fish_stick']"
$ echo "$foo" | grep -F "\$server['fish_stick']"
$server['fish_stick']
Использованиерегулярное выражение:
$ echo "$foo" | grep "\$server\['fish_stick'\]"
$server['fish_stick']
Использование регулярного выражения и обработка вложенных одинарных кавычек:
$ echo "$foo" | grep '\$server\['\''fish_stick'\''\]'
$server['fish_stick']
Внутри одинарных кавычек нельзя избегать вложенных одинарных кавычек.Вы должны закрыть кавычки, а затем снова открыть их, чтобы «убежать» от одинарных кавычек.
http://mywiki.wooledge.org/Quotes