«Попытка присвоения переменной» в bash - PullRequest
1 голос
/ 28 апреля 2020

Я новичок в Bash и у меня возникли проблемы с созданием скрипта. Этот скрипт берет числа и добавляет их к общему итогу. Тем не менее, я не могу заставить итог работать. Он постоянно утверждает, что итог не является переменной, несмотря на то, что он был назначен ранее в программе.

сообщение об ошибке (8 - вводимый номер примера)

./adder: line 16: 0 = 0 + 8: attempted assignment to non-variable (error token is "= 0 + 8")
#!/bin/bash

clear
total=0
count=0


while [[ $choice != 0 ]]; do

    echo Please enter a number or 0 to quit

    read choice

    if [[ $choice != 0 ]];
    then
        $(($total = $total + $choice))

        $(($count = $count + 1))


        echo Total is $total
        echo
        echo Total is derived from $count numbers

    fi

done


exit 0

1 Ответ

1 голос
/ 28 апреля 2020

Избавьтесь от некоторых знаков доллара перед именами переменных. Они не обязательны внутри арифметического c контекста, которым является ((...)). С левой стороны присваивания они не просто необязательны, они запрещены, потому что = нужно имя переменной слева, а не ее значение.

Также $((...)) должно быть простым ((...)) без начального знака доллара. Знак доллара фиксирует результат выражения и пытается выполнить его как команду. Он попытается выполнить команду с именем 0 или 5 или любым другим вычисляемым значением.

Вы можете написать:

((total = $total + $choice))
((count = $count + 1))

или:

((total = total + choice))
((count = count + 1))

или даже:

((total += choice))
((count += 1))
...