consideri il seguente script (sintassi aritmetica che viene utilizzato per local_var2 è irrilevante per questo caso):Differenza tra ksh e bash script di
#!/bin/ksh
function my_func1
{
typeset local_var1=one
typeset local_var2
((local_var2 = 1))
echo my_func1: local_var1 = $local_var1, local_var2 = $local_var2
}
my_func2()
{
typeset local_var1=two
typeset local_var2
((local_var2 = 2))
echo my_func2: local_var1 = $local_var1, local_var2 = $local_var2
}
local_var1=0
local_var2=0
echo before functions: local_var1 = $local_var1, local_var2 = $local_var2
my_func1
echo after my_func1: local_var1 = $local_var1, local_var2 = $local_var2
my_func2
echo after my_func2: local_var1 = $local_var1, local_var2 = $local_var2
Quando eseguito produce il seguente output:
before functions: local_var1 = 0, local_var2 = 0
my_func1: local_var1 = one, local_var2 = 1
after my_func1: local_var1 = 0, local_var2 = 0
my_func2: local_var1 = two, local_var2 = 2
after my_func2: local_var1 = two, local_var2 = 2
(che non è quello che ci si aspetta!)
Se eseguo lo stesso script in bash, l'output è:
before functions: local_var1 = 0, local_var2 = 0
my_func1: local_var1 = one, local_var2 = 1
after my_func1: local_var1 = 0, local_var2 = 0
my_func2: local_var1 = two, local_var2 = 2
after my_func2: local_var1 = 0, local_var2 = 0
(che è quello che ci si aspetta!)
testato e confermando l'uscita! Sebbene, oltre a dire che ksh fa schifo, non ho spiegazioni per questo ;-) – zmo
con un 'set -vx' in codice (e per shell dipendente dalla funzione) vedrai che il contenuto di varaible è chiaramente diverso da quello previsto a primo utilizzo della seconda chiamata – NeronLeVelu