[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: [shell-script] Sobre shell, perl e funcionalidades
From: |
Julio Cezar Neves - DATAPREVRJ |
Subject: |
RES: [shell-script] Sobre shell, perl e funcionalidades |
Date: |
Fri, 12 Nov 2004 13:45:30 -0300 |
Aê Aurélio,
tem uma diferençazinha no que vc explicou. Repare:
$ IFS=^
$ set - $(echo 3^2004-09-10^campanha1^pagina1^56)
$ echo $3
campanha1
$ linha="3^2004-09-10^campanha1^pagina1^56"
$ echo "$linha"
3^2004-09-10^campanha1^pagina1^56
$ echo $linha
3 2004-09-10 campanha1 pagina1 56
Vc disse que "o set - não splita pelo IFS modificado para :. mas se eu
colocar a string numa variável funciona" e no duro, o problema é que a
cadeia a ser "tokeneizada" (arghh) tem que ser exibida para o shell, para
que ele faça as devidas substituições. Mas isso não é caracteristico do set.
Isso é para todas instruções que usam o IFS como separador. Veja:
$ for i in 3^2004-09-10^campanha1^pagina1^56
> do echo $i
> done
3 2004-09-10 campanha1 pagina1 56
$ for i in $(echo 3^2004-09-10^campanha1^pagina1^56)
> do echo $i
> done
3
2004-09-10
campanha1
pagina1
56
[ ]s,
Julio Cezar Neves
- Programa de Software Livre -
Tel:+55 21 2528-7070 / +55 21 8112-9988
Fax: +55 21 2528-7646
mailto:address@hidden
| -----Mensagem original-----
| De: Aurelio Marinho Jargas [mailto:address@hidden]
| Enviada em: sexta-feira, 12 de novembro de 2004 10:59
| Para: address@hidden
| Assunto: RE: [shell-script] Sobre shell, perl e funcionalidades
|
|
|
| alou,
|
| --- MrBiTs <address@hidden> escreveu:
|
| > Obrigado pelas dicas. Me explica uma coisa: o que o set - $linha
| > efetivamente faz ?
|
| o "set - STRING" tokeniza a string, atribuindo a
| $1, $2, $3, ... os tokens encontrados. veja:
|
| $ set - um dois tres quatro
| $ echo $1 - $2 - $3 - $4
| um - dois - tres - quatro
| $
|
| mas foi boa tua pergunta. eu achava que o set -
| fazia o split pelo valor corrente do IFS (internal
| field separator), mas na verdade é pelo valor padrão
| do IFS, que é " ", \t e \n.
|
| $ IFS=:
| $ set - a:b:c:d:e:f
| $ echo $2 - $4
| -
| $
|
| não funcionou. o set - não splita pelo IFS
| modificado para :. mas se eu colocar a string
| numa variável funciona:
|
| $ IFS=:
| $ VAR=a:b:c:d:e:f
| $ set - $VAR
| $ echo $2 - $4
| b - d
| $
|
| não por causa do set em si, mas porque o IFS
| modificado entra em ação ao mostrar o conteúdo
| da variável, então o set - já a recebe separada
| por espaços em branco:
|
| $ IFS=:
| $ VAR=a:b:c:d:e:f
| $ echo $VAR
| a b c d e f
| $
|
| mas como na prática geralmente o conteúdo a ser
| tokenizado vai estar numa variável, funciona.
|
| por isso no teu problema usei o ^ como IFS, e depois
| o set -:
|
| > > $ linha="3^2004-09-10^campanha1^pagina1^56"
| > > $ IFS=^
| > > $ set - $linha
| > > $ echo $3
| > > campanha1
|
| mas veja a resposta do julio que ele mostrou como popular
| o array diretamente para a linha. faz tempão que não lido
| com arrays no shell, mas se não me engano eles são
| unidimensionais, então você não consegue fazer a matriz
| de linhas e colunas como provavelmente o perl faz. aí
| tem que manipular linha a linha no loop mesmo.
|
| falou!
|
|
| =====
| --
| Aurelio Marinho Jargas, Curitiba, Conectiva
| Funcoes ZZ, versao nova http://aurelio.net/zz
|
|
|
|
|
| _______________________________________________________
| Yahoo! Acesso Grátis - Internet rápida e grátis. Instale o
| discador agora! http://br.acesso.yahoo.com/
|
|
| ---------------------------------------------------------------------
| Esta lista não admite a abordagem de outras liguagens de
| programação, como perl, C etc. Quem insistir em não seguir
| esta regra será moderado sem prévio aviso.
| ---------------------------------------------------------------------
| Sair da lista: address@hidden
| ---------------------------------------------------------------------
| Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Links do Yahoo! Grupos