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