Sua linha para today= deve ficar assim:
today=$(date +%Y_%m_%d)
como today agora é uma variável, ela seria designada com um $ , o que leva a palavra assim:
echo $today
que daria 2016_02_23 como saída. Assim, as linhas depois de usar essa variável today ficariam assim:
filename="~/homework/${today}.homework"
e
vim "~/homework/${today}.homework"
ou desde que você forneceu filename como variável, você pode fazer isso:
vim "$filename"
Ou, se você quiser realmente ser criativo, em vez de atribuir a variável primeiro, basta fazer o próprio comando no nome do arquivo quando abrir tudo em uma linha:
vim "~/homework/$(date +%Y_%m_%d).homework"
Espero que isso ajude!