De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Julio Cezar Neves
Data de Publicação: 26 de setembro de 2021
As expansões de parâmetros são ferramentas muito versáteis, já que substituem diversos comandos e muito rápidas, pois atuam como variáveis e não como comandos.
Sua versatilidade deve-se também ao fato de quando estão trabalhando com
cadeias, permitirem o uso do globbing normal - que são os curingas
conhecidos por todos para expansão de nomes de arquivos e diretórios (*
,
?
, [a-z]
e [!a-z])
- um globbing estendido, que por ser
muito desconhecido, é necessário que se fale um pouco sobre ele
Quem habilita seu uso é a opção extglob
, cujo padrão (default) é estar
ativa. Por motivo didático, sempre vou ligar esta opção antes de usá-la, mas
isso normalmente não é necessário (mas dentro de um script, é obrigatório). Por
via das dúvidas, veja como saber seu estado:
$ shopt extglob # Lista estado da facilidade
extglob off # Está desligado
Está desligado, então para termos certeza que ele sempre estará ligado, podemos fazer:
$ shopt extglob | grep off && shopt -s extglob
$ shopt extglob
extglob on # Agora foi ligado
Então, conforme dá para notar por este exemplo, ligamos esta facilidade com
a opção -s
do comando shopt
.
Nas linhas a seguir, LISTA
contém um ou mais padrões separados por uma
barra vertical (|
), que, diga-se de passagem, é tratada como um OU lógico
em expressões regulares e em diversos comandos que em sua sintaxe aceitam a
formação de padrões de pesquisa usando os caracteres coringa (como o comando
case
, por exemplo). Veja:
?(LISTA) |
Casa zero ou uma ocorrência de LISTA (exatamente como em uma expressão regular, já que torna LISTA opcional). |
*(LISTA) |
Casa zero ou mais ocorrências de LISTA (exatamente como em uma expressão regular). |
+(LISTA) |
Casa uma ou mais ocorrências de LISTA (exatamente como em uma expressão regular). |
@(LISTA) |
Casa com exatamente uma ocorrência de LISTA . |
!(LISTA) |
Casa com qualquer coisa, exceto com LISTA (A exclamação (! ) em diversos comandos (como exemplo o test ) é tratada como negação). |
Para poder utilizá-los precisa executar o comando shopt -s conforme o exemplo a seguir:
$ shopt -s extglob # Liga a facilidade (argumento) extglob $ ls arq* arq arqdados arqdadosdados arqutils $ echo arq?(dados) arq arqdados $ ls arq*(dados) arq arqdados arqdadosdados $ ls arq+(dados) arqdados arqdadosdados $ echo arq@(dados) arqdados $ ls arq!(dados) # Divertido esse arq arqdadosdados arqutils $ ls arq+(dados|utils) arqdados arqdadosdados arqutils $ ls arq@(dados|utils) # O mesmo que ls arq {dados,utils} arqdados arqutils $ ls *meng+(a|o)?(o).+(gif|jpg|png) # Arquivos de imagem do Flamengo flamengo.gif mengao.png mengo.jpg
Esse último é bem completo e por isso vou desmembrá-lo:
*meng |
Qualquer coisa (*) seguida de meng |
+(a|o) |
Casa com, pelo menos, um (+ ) a ou (|) o |
?(o). |
Uma letra o opcional (? ) - para o caso de mengao - seguido de um ponto |
+(gif|jpg|png) |
Pelo menos uma dessas extensões (| = OU) |
Mas também casaria com indesejados como mengaao
, mengoo
, ... porque o mais
(+)
significa "pelo menos 1".
Note que usei echo
e ls
indiscriminadamente, pois quem faz a expansão é o Shell.
O default do extglob
é estar ativo - pelo menos nos ambientes que testei -
é bom ter essas expansões sempre em mente, pois podem ser utilizadas em
diversos casos, como:
test ([[ ... ]])
;
case
;
Amanhã veremos um resumo das Expansões de Parâmetros para em dias subsequentes destrinchá-las uma a uma.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários