Forum dedicato alla programmazione.
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
tom
Packager
Messaggi: 407 Iscritto il: dom 1 nov 2009, 12:53
Nome Cognome: Tommaso D'Anna
Slackware: 13.37
Kernel: 2.6.37.6
Desktop: xfce
Messaggio
da tom » dom 30 ott 2011, 19:00
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?
boh
Linux 4.x
Messaggi: 1027 Iscritto il: ven 16 set 2005, 0:00
Slackware: 14.2 (x64)
Kernel: 4.4.111
Desktop: KDE 4.14.32
Località: Milano
Contatta:
Messaggio
da boh » dom 30 ott 2011, 23:59
Istintivamente ti direi di usare un vettore di puntatori a funzione, ma non so se il bash li supporta (non lo conosco molto).
"Be yourself. Everyone else is already taken. " ~ Oscar Wilde
Blallo
Packager
Messaggi: 3302 Iscritto il: ven 12 ott 2007, 11:37
Nome Cognome: Savino Liguori
Slackware: 14.2 / 12.2
Kernel: 4.4.14-smp
Desktop: DWM
Località: Torino / Torremaggiore (FG)
Contatta:
Messaggio
da Blallo » lun 31 ott 2011, 1:55
Non mi pare sia possibile.
masalapianta
Iper Master
Messaggi: 2775 Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:
Messaggio
da masalapianta » lun 31 ott 2011, 8:20
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
d4z_c0nf
Packager
Messaggi: 1296 Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo
Messaggio
da d4z_c0nf » lun 31 ott 2011, 10:29
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?
masalapianta
Iper Master
Messaggi: 2775 Iscritto il: lun 25 lug 2005, 0:00
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian
Località: Roma
Contatta:
Messaggio
da masalapianta » lun 31 ott 2011, 10:59
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)
d4z_c0nf
Packager
Messaggi: 1296 Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo
Messaggio
da d4z_c0nf » lun 31 ott 2011, 11:14
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
targzeta
Iper Master
Messaggi: 6631 Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa
Messaggio
da targzeta » lun 31 ott 2011, 18:25
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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
ZeroUno
Staff
Messaggi: 5441 Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:
Messaggio
da ZeroUno » gio 3 nov 2011, 0:35
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
d4z_c0nf
Packager
Messaggi: 1296 Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo
Messaggio
da d4z_c0nf » gio 3 nov 2011, 0:52
Non dicevo mica che sono la stessa cosa, dicevo solo che nel caso specifico ottieni lo stesso risultato.
ZeroUno
Staff
Messaggi: 5441 Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:
Messaggio
da ZeroUno » gio 3 nov 2011, 16:39
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.