Вы передаете всю дату как числовое выражение c, поэтому 2009-02-01 интерпретируется как 2009 - 2 - 1, то есть 2009 - 3 = 2006. Попробуйте следующее:
echo $(( 10#$var ))
Но числа, начинающиеся с 0, интерпретируются как восьмеричные числа, а 08 в этом 2009-03-08 не могут быть интерпретированы как восьмеричные, поскольку в восьмеричных числах допускаются только цифры 0-7.
Может быть, вам нужно сравнивать даты как строки, а не как числа c выражения?
[[ $var == $enddate || $var > $enddate ]] && break
Обратите внимание, я также изменил ||
на &&
. Также >=
не существует, но вы можете заменить двойное сравнение на
[[ ! $var < $enddate ]]