$(...) é uma substituição de comando (não apenas um subshell), mas $((...)) é uma expansão aritmética.
Quando você usa $((...)) , o ... será interpretado como uma expressão aritmética. Isso significa, entre outras coisas, que uma seqüência hexadecimal será interpretada como um número e convertida em decimal. A expressão inteira será então substituída pelo valor numérico ao qual a expressão é avaliada.
Assim como a expansão de parâmetros e a substituição de comandos, $((...)) deve ser citado para não ser afetado pela divisão de palavras do shell e globalização de nome de arquivo.
echo "$(( 0x63 ))"
Como observação, as variáveis que ocorrem em uma expressão aritmética não precisam de seu $ :
$ x=030; y=30; z=0x30
$ echo "$(( x + y +x ))"
78