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: Rubens Queiroz de Almeida
Data de Publicação: 8 de abril de 2023
As expansões de parâmetros em Bash são mais rápidas porque o Bash é capaz de realizar a expansão diretamente, sem chamar outro programa externo para processar a tarefa. Isso significa que não há overhead de criação de processo e comunicação entre processos, o que torna a expansão de parâmetros mais rápida e eficiente em termos de recursos do sistema.
Como diz o nome, as Expansões de Parâmetros são tratadas como variáveis, precisando portando estar associadas a um comando ou uma atribuição associado e, caso o comando associado seja um builtin, a velocidade e eficiência serão imbatíveis no universo dos interpretadores.
A dica de hoje é para ilustrar um conceito que uso bastante em meus scripts, e que mostra uma funcionalidade muito interessante das expansões de parâmetros.
Por exemplo, em meus scripts para me comunicar com as pessoas, eu geralmente pego apenas o primeiro nome, para utilizar na saudação da mensagem.
Para isto tenho que apagar do nome tudo que vier após o primeiro espaço em branco.
Então vamos lá:
$ nome=Rubens:Queiroz:de:Almeida $ echo ${nome%:*} Rubens:Queiroz:de $ echo ${nome%%:*} Rubens $ echo ${nome#*:} Queiroz:de:Almeida $ echo ${nome##*:} Almeida
Analisando os exemplos acima, vemos que quando usamos as diretivas %
e
%%
o que ocorre é que o registro $nome
é pesquisado da direita para
a esquerda.
O comando a=${nome%:*}
percorre a string do fim para o começo e ao
encontrar o separador :
apaga todos os caracteres até o fim do registro,
inclusive o próprio separador (:
), resultando em Rubens:Queiroz:de
Já o comando a=${nome%%:*}
percorre todo o registro, também do fim para
o começo, até encontrar a primeira ocorrência do separador :
e apaga
todos os caracteres, inclusive o próprio separador, até o fim do registro,
resultando em Rubens
.
Os caracteres #
e ##
fazem a pesquisa do começo para o fim do
registro.
A atribuição a=${nome#*:}
começa a pesquisa no início do registro
e ao encontrar primeira ocorrência do separador :
, apaga todos os
caracteres do início do registro até o separador encontrado, resultando em
Queiroz:de:Almeida
.
A atribuição a=${nome##*:}
começa a pesquisa no início do registro e
ao encontrar a última ocorrência do separador :
apaga todos os caracteres
do começo do registro até o último separador, resultando em Almeida
.
Este recurso de expansão de parâmetros pode ser usado de várias formas diferentes.
Vejamos mais um exemplo:
$ frase="Olá, mundo!"
$ echo ${frase#Olá, }
mundo!
Aqui eu indico que percorrerei a variável $frase
do início para o fim
e vou remover os caracteres Olá, ``, resultando em ``mundo!
.
Vejamos agora exemplos de manipulação do caminho de programas:
$ caminho="/usr/local/bin/script.sh"
$ echo ${caminho#*/}
local/bin/script.sh
No exemplo a seguir, reproduzimos a funcionalidade do comando basename
,
porém, é claro, muito mais rápído:
$ echo ${caminho##*/}
script.sh
Aqui reproduzimos a funcionalidade do comando dirname
:
$ echo ${caminho%/*}
/usr/local/bin
Este texto é apenas uma dica sobre um recurso específico da expansão de parâmetros, mas tem muito, muito mais.
Só para você ver como tem muito mais coisas, o exemplo que dei com meu nome poderia ter sido resolvido de forma diferente:
$ Nome="Rubens Queiroz de Almeida"
$ echo ${Nome/ *}
Rubens
Em nosso portal nós temos uma referência completíssima do uso de expansão de parâmetros, dividida em quatro artigos de autoria do Prof. Julio Neves. Agora corra lá para entender a mágica que fiz para isolar o meu primeiro nome...
Além disso, temos também uma playlist com 5 vídeos abordando em profundidade esse assunto:
»»» Programação Shell Linux - Expansão de Parâmetros
É importante notar que a expansão de parâmetros é uma operação muito rápida em comparação com outras operações em bash, como expressões regulares ou comandos externos. Portanto, é uma boa prática usar expansão de parâmetros sempre que possível para obter um melhor desempenho em scripts do bash.
Vale muito a pena investir nesse conhecimento, que vai fazer toda a diferença em sua carreira.
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