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

Re: [linux_var] Re: For Shell Script wizards...



Il Monday 22 October 2007 11:37:55 0bscure ha scritto:
> Scusate ma la stanchezza settimanale mi debilita il cervello! E il
> lunedì è peggio..
> Stesso problema del post precedente:
>
> Avendo variabili globali
> A=1
> B=2
>
> La funzione riceve ammettiamo A come parametro e poi modificare B
>
> funzionexyz ()
> {
>         a=$1
>         B=a
> }
> ...
> funzionexyz "$A"
>
> E fin qui niente di strano.
>
> Ma questo succede se dentro la funzione dichiaro esplicitamente
> l'assegnamento di B
> Se invece volessi rendere la funzione generica e invece di esplicitare
> B=a gli si passasse l'indirizzo di una variabile (il "&" del C per
> intenderci)
>
>
> Qualcuno ha un'idea?? Forza che siete sempre dietro a scriptare e non
> dovrebbe essere un probema.....
>
> Saluten
> A

Ti incollo il codice (commentato) che dovrebbe fare quello che ti serve:
###########################################
# funz() si aspetta due nomi di variabili,
# in pratica usa i nomi delle variabili come se fossero i puntatori.
# 
# * Per il primo "puntatore": e' printato il puntatore, cioe' il nome
# della variabile e il "valore puntato", cioe' il valore contenuto
# nella variabile.
#
# * Per il secondo "puntatore": gli assegna un valore.
#
function funz() {
	echo "la variabile si chiama '$1'"
	echo "il contenuto della variabile e\` '${!1}'"

	eval "$2='PiPPo'"
}

# testa se fa quello che dovrebbe...
A="una var"
funz "A" "B"

echo "$B"
#############################################

Credo che sia l'unico modo per ottenere qualcosa di simile a dei puntatori.
Ha i difetti che le variabili A e B devono comunque essere globali; e 
l'indirizzamento indiretto con ${!variabile} non credo che funzioni su shell 
non bash (o bash vecchie)


 --
 Email.it, the professional e-mail, gratis per te: http://www.email.it/f

 Sponsor:
 Prestiti e Finanziamenti con un semplice click, scopri subito se sei finanziabile cliccando qui
 Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid)10&d"-10

  (--- * * * * * * * * * * * * * * * * * * * * * * ---)
Per cancellare l'iscrizione: <talking-unsubscribe at ml.linuxvar.it>
Interfaccia web di configurazione: http://ml.linuxvar.it/ml/