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

Re: bash e variabili globali



2010/9/19 Paolo Sala <piviul@riminilug.it>:
> Ennio Sr scrisse in data 18/09/2010 17:23:
>> [...]

Mi dispiace, ma temo di continure a non capire... ;-(

> È nello scoprire questo

cosa eattamente? (che con 'test' la funzione restituisce il valore che
le è sato assegnato quando l'hai definita, mentre con '$test'
restituisce un novo valore di 'var', se nel frattempo hai ri-definito
'var' stessa?)

> che ho sentito il bisogno di chiedere lumi
> perché per me è stata una sorpresa questo comportamento. Da quel che ho
> capito quando viene chiamata una funzione con $ viene creata una
> subshell e quindi la funzione accede ad una copia delle variabili
> d'ambiente ed ogni modifica effettuata a queste viene quindi persa.

Spero che altri ti possano chiarire meglio questi concetti (ma dove li
hai letti, in 'man bash'?)
(Per me le variabili di ambiente sono quelle definite in .bashrc o
.bash_profile....)

> E mi
> chiedevo: c'è un modo per fare si che chiamando una funzione in una
> subshell acceda alle variabili d'ambiente e non ad una loro copia?

Ma... la copia non ha lo stesso valore dell'originale? <Se no che copia e'?

> Oppure un modo per esportare dalla subshell le variabili d'ambiente alla
> routine chiamante; qualcosa tipo $(test; export var)... che ovviamente
> non funziona.

Non capisco. se fai un esempio pratico, forse.....

Ma, nel primo messaggio, non avevi detto (dentro la definzione della
funzione) che volevi cambiare (immagino successivamente) il valore
assegnato a 'var'?
Se e' questo quello che vuoi fare, allora ti basta ri-definire 'var'
(magari con n bel 'read var' in corso di esecuzione dello script)
prima di ri-chiamare la funzione con $test.
Tra l'altro, se vuoi usare semplicemente 'test' (anziche' $test), puoi definire:
var="bla bla bla" (prima di definire la funzione test), e, nella
definizione di test metti:
... var_t=$var
cosi' puoi chiamare la funzione solo come 'test' e ti restituisce
sempre il valore (vecchio o nuovo che hai assegnato a 'var'.

Ma sto divagando e forse nn ci combina niente con cio' che hai in mente ;)
-- 
[Perche' usare Win$ozz (dico io) se ..."anche uno sciocco sa farlo.   \\?//
 Fa' qualche cosa di cui non sei capace!"  (diceva Henry Miller) ]    (°|°)
[Why use Win$ozz (I say) if ... "even a fool can do that.              )=(
 Do something you aren't good at!" (as Henry Miller used to say) ]


Reply to: