Não que eu possa ver.
Mas há uma diferença entre [[ val1 < val2 ]]
e (( val1 < val2 ))
: a primeira é uma comparação de string.
$ [[ 2 -lt 007 ]] && echo true || echo false
true
$ [[ 2 < 007 ]] && echo true || echo false
false
$ (( 2 < 007 )) && echo true || echo false
true
Embora zeros iniciais ainda sejam um problema em ambos os casos:
$ (( 20 < 021 )) && echo true || echo false
false
$ [[ 20 -lt 021 ]] && echo true || echo false
false
Isso porque eles marcam números octal, como em C. Mas você evita isso prefixando-os com 10#
. ( Aritmética shell da Bash Reference 6.5 )
$ (( 10#20 < 10#021 )) && echo true || echo false
true