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

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

Re: [shell-script] Re: Colocando Array em Whiptail Menu


From: Julio C. Neves
Subject: Re: [shell-script] Re: Colocando Array em Whiptail Menu
Date: Wed, 2 Dec 2015 17:08:33 -0200

Fala Itamar,
pensava igualzinho a vc por achar que, em virtude do eval dar duas passadas no cmd, ele ficaria muito lento, mas fiz uns testes e vi que, por ele ser builtin, não é tão lento qto imaginava. Por outro lado algumas vezes vc pode fugir dele, outras não.

Se:
a=b
b=3

Para pegar o valor de b usando a variável a, vc pode fazer:
eval echo $`echo $a` # na primeira passada executa o que está entre crases e na 2a. resolve.
eval echo \$$a # Na 1a. passada tira a \ e troca $a por b e na 2a. resolve.

Mas para resolver esta indireção tem uma solução melhor com expansão de parâmetros (verdadeiros aviões a jato). Ficaria assim:

echo ${!a}

Beleza, mas veja isso:

$ Paipe=\|
$ ls $Paipe wc -l
ls: não é possível acessar |: Arquivo ou diretório não encontrado
ls: não é possível acessar wc: Arquivo ou diretório não encontrado
$ eval ls $Paipe wc -l
282

Aqui não tem como fugir do eval pq vc infringiu a ordem de trabalho do Bash que primeiro resolve os redirecionamentos e depois as variáveis e o que precisávamos era o oposto.

Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 07/12 a 11/12
Rio de Janeiro Voyager 15/12 a 17/12
Rio de Janeiro EDX 07/03 a 11/03
São Paulo 4Linux 11/04 a 15/04
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.


Em 2 de dezembro de 2015 12:09, address@hidden [shell-script] <address@hidden> escreveu:
 

Não sou muito fã do eval, mas acho que é caso se usa-lo para o que você precisa.


Tenta essa abordagem:

Usei o for entre "crases" para não confundir-se com a construção externa "$()", mas também poderia ser usado se quisesse

CIDADE=$(eval whiptail --title \"PROGRAMA PARA CADASTRO DE IPS PARA BACKUP\" --menu \"Escolha o LOCAL\" 15 60 4 `for city in "${!CIDADES[@]}";do echo -n "\"$city\" \"${CIDADES[$city]}\" ";done` 3>&1 1>&2 2>&3)

[]'s
Itamar



reply via email to

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