Итак, grep: grep -l '! #Abc'
также требует список файлов для обработки:
grep -l '!#abc' ./*
работает со всеми файлами в текущем каталоге.
Для echo: echo "#! A"
требуется немного больше цитирования, например:
$ echo '#!a'
#!a
$ echo '#'\!'a'
#!a
$ echo '#'\!a
#!a
$ echo "#!"a
#!a
$ echo "#"'!a'
#!a
$ echo $'#!a'
#!a
'#' - это символ комментария. Из LESS = + '/ ^ * COMMENTS' man bash
:
КОММЕНТАРИИ
В неинтерактивной оболочке или интерактивной оболочке, в которой параметр interactive_comments для магазина builtin включен (см. SHELL ВСТРОЕННЫЕ КОМАНДЫ ниже), слово, начинающееся с #, заставляет это слово и все оставшиеся символы в этой строке игнорироваться. Интерактивная оболочка без включенной опции interactive_comments не допускает комментариев . Параметр interactive_comments по умолчанию включен в интерактивных оболочках .
Все, что следует за ним в одной строке, считается 'комментарием' и не обрабатывается, например:
$ echo one # two three
one
Если вы хотите Чтобы избежать его эффекта, вам нужно заключить его в кавычки или поместить сразу после другого непустого символа:
$ echo one t# wo three
one t# wo three
!
- это «ключевой персонаж» истории.
Только верхушка айсберга: Из LESS = + '/ ^ * HISTORY EXPANSION' man bash
:
HISTORY EXPANSION
Расширения истории вводятся появлением символа расширения истории, который есть! по умолчанию. Только обратная косая черта () и одинарные кавычки могут заключать в кавычки символ раскрытия истории, но символ раскрытия истории также рассматривается как кавычка, если он непосредственно предшествует закрывающей двойной кавычке в строке с двойными кавычками.
Итак, последний вопрос: Что значит #! на самом деле представляют?
.
Ответ: Это зависит от обстоятельств.
Также зависит от окружающих персонажей.
Зависит от того, цитируется оно (и как оно цитируется) или нет.
И зависит от того, есть ли перед ним пробел и / или завершающий пробел.
При правильных кавычках - те же самые символы.
Если не кавычки с начальным пробелом: комментарий.
Если не кавычки, без начального пробела и без конечного пробела: раскрытие истории.
Если не кавычки, без начального пробела, с конечным пробелом: символы.
Это, конечно, предполагает, что оба параметра
shopt -p interactive_comments
shopt -po history
установлены. Каждый управляет соответствующим персонажем ( #
и !
) в интерактивных оболочках. В неинтерактивных оболочках всегда используется символ комментария, а раскрытие истории почти всегда не активируется.