GNU/Linux >> Znalost Linux >  >> Linux

Nefunguje přírůstek čítače ve smyčce Bash

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


Linux
  1. R 3.5.0 nefunguje na Ubuntu 18.04?

  2. Bash Beginner Series #8:Loops in Bash

  3. jps nefunguje

  1. fflush() v Linuxu nefunguje

  2. Linuxový příkaz 'll' nefunguje

  3. Příkaz Conda pracuje v příkazovém řádku, ale ne ve skriptu bash

  1. Proměnná Curl Outfile nefunguje ve skriptu Bash?

  2. Zvýšit číslo sestavení v Bash?

  3. echo znak nového řádku nefunguje v bash