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

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

Re: [shell-script] Setando variáveis usando o valor de outra variável...


From: Julio C. Neves
Subject: Re: [shell-script] Setando variáveis usando o valor de outra variável...
Date: Tue, 12 Apr 2011 10:12:22 -0300

Fala Felipe,
a melhor forma que vc quer fazer para treinar é a seguinte:

for ((i=1; i<=$#; i++)
do
    eval Var$i=\$$i
done

Isso se dá pq o Shell executa suas tarefas em fases e, na fase de substituir
as variáveis por seus valores, a única variável que existia era a $i. O eval
se usa nesses casos em que é preciso dar duas passadas: na 1ª ele avalia
(evaluate); e na 2ª executa.

Assim na 1ª passada, ele substituiria $i por seu valor e retiraria a
contrabarra (\) e na 2ª, faria a substituição correta, já com os valores
resolvidos.

Como disse, isso foi para satisfazer a sua curiosidade, mas a melhor forma
de fazer é simplesmente:

var=( "$@" )

e para testar faça:

echo ${var[0]}
echo ${var[1]}
echo ${var[2]}
....
echo ${var[@]}

Abraços,

Julio

*Cursos de Shell ou Zenity em fins de semana?*

*☎ Ligue (21) 8112-9988* ☎
Contacte-me [image: Twitter] <http://twitter.com/#%21/juliobash/>


Em 11 de abril de 2011 15:52, Felipe D. Martins
<address@hidden>escreveu:

>
>
> Boa tarde galera.
>
> Estava criando um script, pra uma atividade boba, até pra exercitar o pouco
> conhecimento que tenho de shell, e me deparei com o seguinte:
>
> Estou pegando a quantidade de parâmetros passados via linha de comando
> (QTD=$#) e fazendo um loop sobre esse valor para pegar cada parâmetro
> passado em uma variável diferente. A questão é que eu estava querendo gerar
> as variáveis de forma dinâmica, usando o próprio "$i" do for pra setar as
> variáveis, de acordo com a quantidade passada. Tipo:
> *
> *
> *QTD=$#
> for (( i = 1; i <= $QTD; i++ )); do
> set P$i=$1 #Aqui é que me lasco, queria gerar as variáveis tipo P1, P2,
> etc...
> shift
> done*
>
> Já me alertaram sobre o subshell gerado pelo for, o que me faz ter dois
> problemas, mas como eu faço pra "sair dessa"?
>
> Um abraço.
>
> Obs: É minha primeira mensagem ao grupo, não estranhem =]
>
> Felipe D. Martins
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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