1.)grep app[\^lL]e file1
Экранирование (\) удаляется оболочкой до того, как grep его видит, поэтому это эквивалентно app[^lL]e
.Бит в скобках соответствует чему-либо, что не совпадает (с ^, поскольку это первый символ): L или l
2.)grep "app[\^lL]e" file1
На этот раз \ выходит из ^, поэтому он соответствует ^ или L или l
3.)grep "app[l\^L]e" file1
^ работает, чтобы отрицать набор, только если это первый символ, так что это соответствует ^ или L или l
4.)grep app[l\^L]e file1
Символ ^ экранирован, но так как он не первый, он не 'не имеет значения, так что это соответствует ^ или L или l