Acho que a explicação mais provável é que sua variável dirsize
está vazia.
Por exemplo, em bash
$ foo=3; bar= ; echo $(( $foo + $bar ))
bash: 3 + : syntax error: operand expected (error token is "+ ")
enquanto estiver em AT & T ksh
$ foo=3; bar= ; echo $(( $foo + $bar ))
ksh: 3 + : more tokens expected
e no BSD mksh
$ foo=3; bar= ; echo $(( $foo + $bar ))
mksh: 3 + : unexpected 'end of expression'
Observe que todos esses shells permitem nomes de variáveis "simples", como (( foo + bar ))
em expressões, e essa forma pode ser preferível, pois trata as variáveis vazias como valores zero. De man bash
:
Shell variables are allowed as operands; parameter expansion is per‐
formed before the expression is evaluated. Within an expression, shell
variables may also be referenced by name without using the parameter
expansion syntax. A shell variable that is null or unset evaluates to
0 when referenced by name without using the parameter expansion syntax.
Então, por exemplo
$ foo=3; bar=7 ; echo $(( foo + bar ))
10
$ foo=3; bar= ; echo $(( foo + bar ))
3