Primero, no estás aumentando el contador. Cambiando COUNTER=$((COUNTER))
en COUNTER=$((COUNTER + 1))
o COUNTER=$[COUNTER + 1]
lo aumentará.
En segundo lugar, es más complicado propagar hacia atrás las variables de la subcapa al receptor de la llamada a medida que supone. Las variables en una subcapa no están disponibles fuera de la subcapa. Estas son variables locales del proceso hijo.
Una forma de resolverlo es usar un archivo temporal para almacenar el valor 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 PROBADO:Centos, SuSE, RH
COUNTER=$((COUNTER+1))
es una construcción bastante torpe en la programación moderna.
(( COUNTER++ ))
parece más "moderno". También puedes usar
let COUNTER++
si crees que eso mejora la legibilidad. A veces, Bash ofrece demasiadas formas de hacer las cosas, supongo que la filosofía de Perl, cuando quizás el Python "solo hay una forma correcta de hacerlo" podría ser más apropiado. ¡Esa es una declaración discutible si alguna vez hubo una! De todos modos, sugeriría que el objetivo (en este caso) no es solo incrementar una variable sino (regla general) también escribir código que alguien más pueda entender y admitir. La conformidad contribuye en gran medida a lograrlo.
HTH