내 변수가 0으로 재설정되지 않는 이유는 무엇입니까?

내 변수가 0으로 재설정되지 않는 이유는 무엇입니까?

아래 루프에서는 두 변수(totalentries 및 totalusedbytes)의 값을 0으로 재설정하려고 시도하지만 결과를 보면 절대 그런 일이 발생하지 않음을 알 수 있습니다. 따라서 각 루프는 이전 루프의 누적 합계에 계속 추가됩니다.

# For each grid name, get a list of map indexes for that gridname
for grid in "${gridNames[@]}"
   do
      totalentries=0
      totalusedbytes=0
      indexlist=`snmpwalk -v 2c -c splunk $host mapGridName -m $APPLIANCEMIB -OUQs -Ln | grep $grid | sed -n 's/.*mapGridName\.\([0-9]\+\)[^0-9].*/\1/p'`
      # Split list into an array
      while read -r line; do
          indexes+=(`echo $line`)
      done <<< "$indexlist"

      # Get the stats
      for index in "${indexes[@]}"
      do
         # Entries in Cache
         numentries=`snmpget -v 2c -c splunk $host mapNumEntries.$index -m $APPLIANCEMIB -OUQs -Ln | sed -n 's/.*\=[^0-9]\([0-9]\+\).*/\1/p'`
         # Used Bytes
         usedbytes=`snmpget -v 2c -c splunk $host mapUsedBytes.$index -m $APPLIANCEMIB -OUQs -Ln | sed -n 's/.*\=[^0-9]\([0-9]\+\).*/\1/p'`
         if [[ $numentries ]]
         then
             totalentries=`expr $totalentries + $numentries`
         fi
         if [[ $usedbytes ]]
         then
             totalusedbytes=`expr $totalusedbytes + $usedbytes`
         fi
      done
      echo $grid"_totalentries="$totalentries
      echo $grid"_totalusedbytes="$totalusedbytes
   done

출력은 다음과 같습니다. 루프에 있는 대부분의 그리드는 아무것도 얻지 못하지만 이전 루프의 합계를 얻습니다.

A_grid_totalentries=0
A_grid_totalusedbytes=0
B_grid_totalentries=3
B_grid_totalusedbytes=30142
C_totalentries=3
C_totalusedbytes=30142
D_grid_totalentries=3
D_grid_totalusedbytes=30142
E_grid_totalentries=3
E_grid_totalusedbytes=30142
F_totalentries=3
F_totalusedbytes=30142
G_grid_totalentries=92
G_grid_totalusedbytes=1054348
H_grid_totalentries=96
H_grid_totalusedbytes=1114431
I_grid_totalentries=96
I_grid_totalusedbytes=1114431

답변1

문제는 인덱스 배열에 계속 추가하고 재설정하지 않는다는 것입니다. 이러한 변수를 0으로 재설정하는 경우 배열을 비워 두세요.

  totalentries=0
  totalusedbytes=0
  indexes=()

또는 배열을 다르게 채웁니다.

  mapfile -t indexes <<< "$indexlist"

관련 정보