Incrementing a variable inside a Bash loop

后端 未结 8 455
挽巷
挽巷 2020-12-29 18:32

I\'m trying to write a small script that will count entries in a log file, and I\'m incrementing a variable (USCOUNTER) which I\'m trying to use after the loop

8条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-29 18:48

    You are using USCOUNTER in a subshell, that's why the variable is not showing in the main shell.

    Instead of cat FILE | while ..., do just a while ... done < $FILE. This way, you avoid the common problem of I set variables in a loop that's in a pipeline. Why do they disappear after the loop terminates? Or, why can't I pipe data to read?:

    while read country _; do
      if [ "US" = "$country" ]; then
            USCOUNTER=$(expr $USCOUNTER + 1)
            echo "US counter $USCOUNTER"
      fi
    done < "$FILE"
    

    Note I also replaced the `` expression with a $().

    I also replaced while read line; do country=$(echo "$line" | cut -d' ' -f1) with while read country _. This allows you to say while read var1 var2 ... varN where var1 contains the first word in the line, $var2 and so on, until $varN containing the remaining content.

提交回复
热议问题