Explicação de uns caracteres

1. Explicação de uns caracteres

Douglas
Roknauta

(usa Ubuntu)

Enviado em 07/08/2017 - 11:56h

No meu cenário eu possuo:

version="`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version -o | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'`"
versionP="${version%.*}"
parteF="${version##*.}"


No código acima eu leio um arquivo pom.xml e extraio o número da sua versão na variável
version 
a saber o valor é: 1.7.63-SNAPSHOT.

Nas 2 variáveis debaixo eu gostaria de saber o que representa o
%.* 
e o
##*. 
que estão concatenados na variável version. Eu tentei pesquisar o significado mas não achei.


  


2. Re: Explicação de uns caracteres

Jose Renan
JoseRenan

(usa Ubuntu)

Enviado em 07/08/2017 - 14:16h

Roknauta escreveu:

No meu cenário eu possuo:

version="`mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version -o | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'`"
versionP="${version%.*}"
parteF="${version##*.}"


No código acima eu leio um arquivo pom.xml e extraio o número da sua versão na variável
version 
a saber o valor é: 1.7.63-SNAPSHOT.

Nas 2 variáveis debaixo eu gostaria de saber o que representa o
%.* 
e o
##*. 
que estão concatenados na variável version. Eu tentei pesquisar o significado mas não achei.


Executando do terminal:
version="1.7.63-SNAPSHOT"
versionP="${version%.*}"
parteF="${version##*.}"

echo $version
echo $versionP
echo $parteF
Saída:
1.7.63-SNAPSHOT
1.7
63-SNAPSHOT

Explicação:
versionP="${version%.*}" => Corresponde a ${sua_variavel%padrão_a_ser_encontrado}
Funciona de trás para frente, por ter somente um %, ao primeiro ponto que achar exibirá o que tiver à frente, por causa do "*". Se fosse "${version%%.*}" a variável seria percorrida até o último ponto q encontrar, no caso exibiria somente 1.

parteF="${version##*.}"=> Corresponde a ${sua_variavel##padrão_a_ser_encontrado}
Percorre da esquerda para a direita a variável, exibe tudo que tiver após o último ponto que encontrar. "${version#*.}" exibiria tudo que tiver após o primeiro ponto entrado, no caso 7.63-SNAPSHOT.

Fonte: http://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/parameter-substitution.html


3. Re: Explicação de uns caracteres

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/08/2017 - 16:24h

Boa tarde Roknauta.
Isso é a "expansão de variáveis".
Veja +:

Sintaxe Expansão Condicional
${var:-texto} Se var não está definida, retorna 'texto'
${var:=texto} Se var não está definida, defina-a com 'texto'
${var:?texto} Se var não está definida, retorna o erro 'texto'
${var:+texto} Se var está definida, retorna 'texto', senão retorna o vazio
Sintaxe Expansão de Strings
${var} É o mesmo que $var, porém não ambíguo
${#var} Retorna o tamanho da string
${!var} Executa o conteúdo de $var (igual 'eval \$$var')
${!texto*} Retorna os nomes de variáveis começadas por 'texto'
${var:N} Retorna o texto a partir da posição 'N'
${var:N:tam} Retorna 'tam' caracteres a partir da posição 'N'
${var#texto} Corta 'texto' do início da string
${var##texto} Corta 'texto' do início da string (* guloso)
${var%texto} Corta 'texto' do final da string
${var%%texto} Corta 'texto' do final da string (* guloso)
${var/texto/novo} Substitui 'texto' por 'novo', uma vez
${var//texto/novo} Substitui 'texto' por 'novo', sempre
${var/#texto/novo} Se a string começar com 'texto', substitui 'texto' por 'novo'
${var/%texto/novo} Se a string terminar com 'texto', substitui 'texto' por 'novo'


FONTE: http://aurelio.net/shell/canivete/#expansao

Marcelo Oliver






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts