Во многих статьях они никогда не включали'!' в шарике, который является неправильным. Так, где делает! действительно принадлежите?
Я использовал! в шарике, например. ls lis[!ta]*
делает это означает! часть шарика?
!
используется и в шариках оболочки и в регулярных выражениях. Это не "принадлежит" также.
В примере, который Вы дали:
ls lis[!ta]*
это - POSIX способ инвертировать (или дополнить) класс символов. От man 7 glob
Complementation An expression "[!...]" matches a single character, namely any character that is not matched by the expression obtained by removing the first '!' from it. (Thus, "[!]a-]" matches any single character except ']', 'a' and '-'.)
(некоторые оболочки также поддерживают ^
для образования дополнения, для непротиворечивости с синтаксисом регулярного выражения). Это также используется в расширенных шариках ksh/bash для подобной цели, напр.
!(foo|bar)
соответствия что-либо кроме foo
или bar
. Для этого использования обратитесь к странице руководства оболочки - в man bash
например:
?(pattern-list) Matches zero or one occurrence of the given patterns *(pattern-list) Matches zero or more occurrences of the given patterns +(pattern-list) Matches one or more occurrences of the given patterns @(pattern-list) Matches one of the given patterns !(pattern-list) Matches anything except one of the given patterns
В жемчуге совместимых регулярных выражениях (PCRE), !
также используется для отрицания lookarounds, как
foo(?!bar)
соответствовать foo
кроме того, где это сопровождается bar
. Посмотрите, например,