Qual è lo scopo di shopt -s extglob


15

Volevo eliminare tutti i file dalla directory tranne quello. Ho trovato la mia soluzione qui . Questa soluzione utilizza un comando

shopt -s extglob

Volevo sapere cosa sta facendo esattamente questo comando, alcune conoscenze sul back-end. Ho anche aggiunto un commento su questa risposta ma non ho ricevuto risposta fino ad ora. Come nuovo utente di Ubuntu sono curioso di sapere cosa sta facendo questo comando.

Risposte:


16

In termini semplici, il globbing si riferisce alla corrispondenza del modello. Bash usa semplici globbing come, echo l*che si espandono in un elenco di file nella directory corrente che iniziano con la lettera l. Ovviamente, come puoi immaginare, è semplice e limitato.

Enter extglob. Come puoi immaginare, sta per extended globbing. Questa opzione consente una corrispondenza del modello più avanzata. Da man bash:

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

E poco prima:

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

Esistono molti modi in cui extglobpossono essere utilizzati. Alcuni buoni esempi sono forniti nel Linux Journal e nella wiki di Greg .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.