shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Cut... com read, detalhamento


From: opa
Subject: Re: Cut... com read, detalhamento
Date: Wed, 31 Mar 2004 18:25:14 -0300 hrN

Com prazer danillofa. Pode me chamar de opa. :)

Tomo a liberdade de responder na lista pois, para mim o trabalho é o mesmo, e 
assim mais pessoas poderão aproveitar algum segmento da idéia.

Aliás não é necessário qualquer agradecimento na lista com mensagem exclusiva, 
apenas um feedback com foco técnico pode às vezes ser interessante.

Fico feliz que o código talvez atenda às suas necessidades. Como pode ver 
é só shell, sem programas externos.

1. O "while ..... done" basicamente recebe a string do echo através do pipe (|).

2. A condição de execução do while é "read -d- V", ou seja, enquanto 
conseguir ler algo mantenha o loop.

3. A leitura do read ocorre até encontrar o delimitador "-" (vide read, no man 
bash) e é colocada na variável V (quer dizer o fim de linha default "
" 
foi trocado por "-", já que a procurada versão está entre dois "-" )

4. ${V#*.} é o conteúdo da variável V sem o "." e tudo à esquerda dele.
Experimente na linha de comando:
V=12.34;echo ${V#*.}
Quer dizer, se a string resultante não for igual (!=) a $V é porque 
existe ponto em $V. Como as duas strings exemplo que você mostrou só tinham 
ponto no número da versão, ficou fácil achá-la.
Mesmo se existissem pontos depois, como em ??-x.y-?????.tar.tgz (pacote a la 
slack), não teria problema, pois como você pode ver ao encontrar a 
desigualdade, 
a variável V é escrita e o while é rompido (break), encerrando o fracionamento.

Cuidado com a possibilidade de versões sem ponto e de nomes com ponto! :(

Espero ter esclarecido mais do que confundido. Qualquer lacuna ou obscuridade 
remanescente, email please.


----------------------------------------------------------------
>From: "danillofa" <address@hidden>
>Date: Wed, 31 Mar 2004 14:29:58 -0000
>
>Ola, desculpe nao sei o seu nome?
>Voce respondeu uma pergunta minha no yahoo, me passou uma funcao para 
>pegar so a versao do pacote, segue abaixo a função:
>
>ver(){
>echo $1|\
>while read -d\- V;do
>[ "${V#*.}" != "$V" ]&&echo $V&&break
>done
>}
>
>Gostaria de te pedir se tem como vc me esplica-la?
>Obrigado e ate mais :)
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]