Очень интересная проблема, тем более что shellcheck не указал на проблему. Проблема в первой строке
read -r -p year
Здесь year
- это не имя переменной, а подсказка (литеральная строка для печати), заданная для -p
. От help read
(сокращенная версия):
read [-r] [-p prompt] [name ...]
Если Имена не указаны, прочитанная строка сохраняется в переменной REPLY
.
Введенная пользователем строка сохраняется в переменной REPLY
, а не в year
. Переменная year
остается неустановленной и расширяется до 0
в арифметическом контексте, таком как ((…))
.
Используйте read -r -p year year
, чтобы решить проблему, или даже лучше
read -r -p 'enter a year: ' year
Дальнейшие улучшения
Является ли #! /shell/bash
действительно правильным? Я никогда не слышал о системе, использующей такой путь. Я бы ожидал /bin/bash
.
Вы можете выполнять назначения внутри ((…))
, не требуя подоболочки. Напишите ((a=b+c))
вместо a=$((b+c))
.