Za prvé, nezvyšujete počítadlo. Změna COUNTER=$((COUNTER))
do COUNTER=$((COUNTER + 1))
nebo COUNTER=$[COUNTER + 1]
zvýší to.
Za druhé, je složitější zpětně šířit proměnné subshell volanému, jak se domníváte. Proměnné v subshell nejsou dostupné mimo subshell. Toto jsou proměnné lokální pro podřízený proces.
Jedním ze způsobů, jak to vyřešit, je použití dočasného souboru pro uložení střední hodnoty:
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
TESTOVANÝ BASH:Centos, SuSE, RH
COUNTER=$((COUNTER+1))
je v moderním programování docela neohrabaná konstrukce.
(( COUNTER++ ))
vypadá "moderněji". Můžete také použít
let COUNTER++
pokud si myslíte, že to zlepšuje čitelnost. Někdy Bash nabízí příliš mnoho způsobů, jak dělat věci - předpokládám filozofii Perlu -, když by možná bylo vhodnější pythonské "existuje jen jeden správný způsob, jak to udělat". To je diskutabilní tvrzení, pokud vůbec nějaké bylo! V každém případě bych navrhoval, že cílem (v tomto případě) není jen zvýšit proměnnou, ale (obecné pravidlo) také napsat kód, kterému někdo jiný rozumí a může ho podporovat. Shoda vede k dosažení tohoto cíle dlouhou cestu.
HTH