Em var2=2*4 , devido a espaços (metacaracteres), e que não há arquivo começando com 2 , alguns caracteres e 4 no pwd.
A linha é dividida em tokens usando espaços como delimitadores.
Isso não tem espaços (e após o = é considerado citado):
$ var1=2*4
Mas isso acontece:
$ echo 2 * 4
E o * se torna um token e é expandido (como uma expansão de nome de arquivo).
Para evitar o efeito especial de * use quoting:
$ expr 2 \* 4
8
$ expr 2 "*" 4
8
$ expr 2 '*' 4
8
No entanto, isso se expande:
$ touch 2good4
$ echo 2*4
2good4
Em echo $((2*4)) , o que está dentro de uma construção $((…)) é interpretado como uma expansão aritmética. qualquer um desses itens fará o mesmo (mesmo com os espaços):
$ echo $((2*4))
8
$ echo $(( 2 * 4 ))
8
$ echo $(( 2 * 4 ))
8