Pagina 1 di 1
BASH: creare funzioni il cui nome è una variabile
Inviato: dom 30 ott 2011, 19:00
da tom
Salve a tutti, vorrei rendere questo codice
Codice: Seleziona tutto
tizio(){
serie di comandi tizio
}
caio(){
serie di comandi caio
}
sempronio(){
serie di comandi sempronio
}
in qualcosa di più elegante, tipo questo
Codice: Seleziona tutto
for i in tizio caio sempronio ; do
$i(){
serie di comandi $i
}
done
solo che a quanto pare in bash non è possibile fare ciò, o comunque la sintassi non parrebbe corretta. Come posso creare funzioni il cui nome sia una variabile?
Re: BASH: creare funzioni il cui nome è una variabile
Inviato: dom 30 ott 2011, 23:59
da boh
Istintivamente ti direi di usare un vettore di puntatori a funzione, ma non so se il bash li supporta (non lo conosco molto).
Re: BASH: creare funzioni il cui nome è una variabile
Inviato: lun 31 ott 2011, 1:55
da Blallo
Non mi pare sia possibile.
Re: BASH: creare funzioni il cui nome è una variabile
Inviato: lun 31 ott 2011, 8:20
da masalapianta
non è possibile ma puoi utilizzare eval per fare qualcosa di simile:
Codice: Seleziona tutto
#!/bin/bash
abc()
{
echo aaa
}
def()
{
echo bbb
}
for i in abc def; do
eval $i
done
Re: BASH: creare funzioni il cui nome è una variabile
Inviato: lun 31 ott 2011, 10:29
da d4z_c0nf
masalapianta ha scritto:non è possibile ma puoi utilizzare eval per fare qualcosa di simile:
Codice: Seleziona tutto
#!/bin/bash
abc()
{
echo aaa
}
def()
{
echo bbb
}
for i in abc def; do
eval $i
done
perchè scusa, facendo solo:
non ottieni lo stesso risultato?
Re: BASH: creare funzioni il cui nome è una variabile
Inviato: lun 31 ott 2011, 10:59
da masalapianta
d4z_c0nf ha scritto:
perchè scusa, facendo solo:
non ottieni lo stesso risultato?
è vero, fa implicitamente l'eval della variabile; strano, son quasi sicuro che fino a qualche anno fa non funzionasse, o nel frattempo hanno modificato qualcosa o mi son rincoglionito io (da non escludere)
Re: BASH: creare funzioni il cui nome è una variabile
Inviato: lun 31 ott 2011, 11:14
da d4z_c0nf
masalapianta ha scritto:d4z_c0nf ha scritto:
perchè scusa, facendo solo:
non ottieni lo stesso risultato?
è vero, fa implicitamente l'eval della variabile; strano, son quasi sicuro che fino a qualche anno fa non funzionasse, o nel frattempo hanno modificato qualcosa o mi son rincoglionito io (da non escludere)
Eheh.
A questo punto però mi viene il dubbio che tom chiedesse un'altra cosa, o forse semplicemente non aveva provato.
Bah
Re: BASH: creare funzioni il cui nome è una variabile
Inviato: lun 31 ott 2011, 18:25
da targzeta
d4z_c0nf ha scritto:..A questo punto però mi viene il dubbio che tom chiedesse un'altra cosa...
anche io ho capito che chiedesse un'altra cosa. Ma secondo me chiede qualcosa di sbagliato a livello concettuale. Aspettiamo delucidazioni.
Emanuele
Re: BASH: creare funzioni il cui nome è una variabile
Inviato: gio 3 nov 2011, 0:35
da ZeroUno
d4z_c0nf ha scritto:
perchè scusa, facendo solo:
non ottieni lo stesso risultato?
Dipende
Codice: Seleziona tutto
$ touch "a a" x pippo
for a in "ls \"a a\"" "ls x" "ls pippo";do $a;done
for a in "ls \"a a\"" "ls x" "ls pippo";do eval $a;done
http://fvue.nl/wiki/Bash:_Why_use_eval_ ... pansion%3F
Re: BASH: creare funzioni il cui nome è una variabile
Inviato: gio 3 nov 2011, 0:52
da d4z_c0nf
Non dicevo mica che sono la stessa cosa, dicevo solo che nel caso specifico ottieni lo stesso risultato.
Re: BASH: creare funzioni il cui nome è una variabile
Inviato: gio 3 nov 2011, 16:39
da ZeroUno
d4z_c0nf ha scritto:Non dicevo mica che sono la stessa cosa, dicevo solo che nel caso specifico ottieni lo stesso risultato.
indubbiamente nel caso specifico ottieni lo stesso risultato
personalmente non ho mai utilizzato eval.