Innanzitutto, non stai aumentando il contatore. Modifica COUNTER=$((COUNTER))
in COUNTER=$((COUNTER + 1))
o COUNTER=$[COUNTER + 1]
lo aumenterà.
In secondo luogo, è più complicato propagare all'indietro le variabili subshell al chiamato come supponi. Le variabili in una subshell non sono disponibili al di fuori della subshell. Queste sono variabili locali al processo figlio.
Un modo per risolverlo è utilizzare un file temporaneo per memorizzare il valore intermedio:
TEMPFILE=/tmp/$$.tmp
echo 0 > $TEMPFILE
# Loop goes here
# Fetch the value and increase it
COUNTER=$[$(cat $TEMPFILE) + 1]
# Store the new value
echo $COUNTER > $TEMPFILE
# Loop done, script done, delete the file
unlink $TEMPFILE
COUNTER=1
while [ Your != "done" ]
do
echo " $COUNTER "
COUNTER=$[$COUNTER +1]
done
BASH TESTATO:Centos, SuSE, RH
COUNTER=$((COUNTER+1))
è un costrutto piuttosto goffo nella programmazione moderna.
(( COUNTER++ ))
sembra più "moderno". Puoi anche usare
let COUNTER++
se pensi che migliori la leggibilità. A volte, Bash offre troppi modi di fare le cose - la filosofia Perl suppongo - quando forse il Python "c'è solo un modo giusto per farlo" potrebbe essere più appropriato. Questa è un'affermazione discutibile se mai ce n'è stata una! Ad ogni modo, suggerirei che l'obiettivo (in questo caso) non sia solo quello di incrementare una variabile ma (regola generale) anche di scrivere codice che qualcun altro possa capire e supportare. La conformità fa molto per raggiungere questo obiettivo.
HTH