[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 :)
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: Cut... com read, detalhamento,
opa <=