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:

Codice: Seleziona tutto


for i in abc def; do
       $i
done
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:

Codice: Seleziona tutto


for i in abc def; do
       $i
done
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:

Codice: Seleziona tutto


for i in abc def; do
       $i
done
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:

Codice: Seleziona tutto


for i in abc def; do
       $i
done
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
ZeroUno ha scritto:
d4z_c0nf ha scritto: perchè scusa, facendo solo:

Codice: Seleziona tutto


for i in abc def; do
       $i
done
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
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.