A expansão til não funciona depois que a variável é expandida, portanto, se você colocar um til literal em var , ele será um til literal para mkdir . (Observe como a mensagem de erro de mkdir tem um til literal, não o caminho real do seu diretório pessoal.)
E, como você coloca o til entre aspas na tarefa, ele também não se expande. Se não estiver entre aspas, faz:
$ var="~/Music"; echo $var
~/Music
$ var=~/"Music"; echo $var
/home/me/Music
Claro, você pode usar apenas $HOME :
$ var="$HOME/Music"; echo $var
/home/me/Music