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.


Remoção de todo o texto após um determinado caractere

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

Saiba mais sobre expansão de parâmetros

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.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Rubens Queiroz de Almeida