[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] acessar parametro no laço for
From: |
Julio C. Neves |
Subject: |
Re: [shell-script] acessar parametro no laço for |
Date: |
Mon, 26 Nov 2012 19:47:06 -0200 |
Fala Emerson,
a sua resposta tem uma pequena imprecisão e por isso quero chamar a atenção
do grupo pq é algo mais ou menos frequente. Se, como vc propôs, fizer:
for a in $*; do
echo $a # 'a' é cada parâmetro (primeiro, segundo, terceiro, etc)
done
e passar 1 parm com brancos, isso fica furado. Veja que vou passar 2 parms
para o bash e executar seu cmd no prompt:
$ set - '1º Parm' '2º Parm'
$ echo $0 #Nome do prog
bash
$ echo $# #Qtd de parms
2
$ echo $* #Todos os parms
1º Parm 2º Parm
$ for a in $*; do
> echo $a # 'a' é cada parâmetro (primeiro, segundo, terceiro, etc)
> done
1º
Parm
2º
Parm
Como disse, deu zebra pq quebrou tudo nos brancos. O certo seria usar @$@
entre aspas. Veja:
$ for a in "$@"; do
> echo $a # 'a' é cada parâmetro (primeiro, segundo, terceiro, etc)
> done
1º Parm
2º Parm
Ahhh! A outra solução (usando o $#) ficaria melhor assim:
$ for ((i=1; i<=$#; i++))
> {
> echo ${!i}
> }
1º Parm
2º Parm
É só medir os tempos que vc verá. Assim usei somente bash (builtin). Nenhum
cmd externo.
Abcs,
Julio
*
*
Em 26 de novembro de 2012 09:30, Emerson Domingues Souto - H2M <
address@hidden> escreveu:
> **
>
>
> for n in `seq $#`; do
>
> eval echo \$$n # 'n' representa o número do parâmetro (1,2,3, etc) que
> graças ao eval e ao duplo $ será usado como uma variável de nome variado
>
> done
>
> OU
>
> for a in $*; do
>
> echo $a # 'a' é cada parâmetro (primeiro, segundo, terceiro, etc)
>
> done
>
> Emerson Domingues Souto
>
> Tecnologia da Informação
>
> Marítima Seguros S/A
>
> Fone: 11 3156-1752
>
> De: address@hidden [mailto:
> address@hidden] Em nome de Anderson Junior
> Enviada em: segunda-feira, 26 de novembro de 2012 01:28
> Para: address@hidden
> Assunto: [shell-script] acessar parametro no laço for
>
> eu de novo aqui, é o seguinte eu preciso acessar os parametros, mas sem
> saber quais parametros foram passados, vou tentar explicar
>
> os parametros são interpretados pelas variaveis especiais
> $1 $2 $3 e assim por diante, quero acessar elas tipo em um comando for
>
> for((I=1; I<=$#; I++))
> {
> echo $[$I] #aqui que eu não sei como acessar elas usando o contador do for
> }
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
[As partes desta mensagem que não continham texto foram removidas]