Não entendo por que o primeiro comando abaixo funciona e, quando uso o comando expr, é necessário que * seja escapado. Na minha opinião, o * deve sempre ser escapado, pois faz parte do BRE e, portanto, deve ser escapado para não representar "qualquer". Portanto, não entendo por que o primeiro comando está realmente funcionando.
$ a=2; b=3; echo $((a*b))
6
$ var1=$(expr 2 * 3) ; echo $var1
expr: syntax error: unexpected argument ‘Desktop’
$ var1=$(expr 2 \* 3) ; echo $var1
6
Ao usar a expansão aritmética
Mas ao usar expr(1), você está apenas passando tudo como argumentos de linha de comando e, como tal, eles estão sujeitos a todas as expansões regulares do shell , incluindo a expansão do nome do arquivo (que usa globbing e não regex porque tenho a obrigação de ser pedante).
Isso é chamado na página de manual expr