¿Cuál es el propósito de shopt -s extglob?

15

Quería eliminar todos los archivos del directorio excepto el uno. Encontré mi solución aquí . Esta solución está usando un comando

shopt -s extglob

Quería saber qué está haciendo exactamente este comando, algunos conocimientos de back-end. También agregué un comentario sobre esta respuesta, pero no recibí respuesta hasta ahora. Como nuevo usuario de Ubuntu, tengo curiosidad por saber qué está haciendo este comando.

Hammad Hassan
fuente

Respuestas:

16

En términos simples, el globbing se refiere a la coincidencia de patrones. Bash utiliza un meneo simple, echo l*que se expande a la lista de archivos en el directorio actual que comienza con la letra l. Por supuesto, como puedes adivinar, es simple y limitado.

Introduzca extglob. Como puedes adivinar, significa extended globbing. Esta opción permite una coincidencia de patrones más avanzada. De man bash:

extglob If set, the extended pattern matching features described
        above under Pathname Expansion are enabled.

Y un poco antes de eso:

If the extglob shell option is enabled using the shopt builtin, several
extended pattern matching operators are recognized.  In  the  following
description, a pattern-list is a list of one or more patterns separated
by a |.  Composite patterns may be formed using  one  or  more  of  the
following sub-patterns:

      ?(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

Hay multitud de formas en las que extglobse puede usar. Se proporcionan bastantes buenos ejemplos en Linux Journal y la wiki de Greg .

Sergiy Kolodyazhnyy
fuente