O "como" foi bem explicado em outras respostas; Quero abordar o "porquê" o código do OP não funciona.
A tônica é que os redirecionamentos de saída são marcados antes da expansão da variável. Redirecionamentos são realmente executados após a expansão da variável (daí porque você pode redirecionar a saída para um nome de arquivo que é armazenado em uma variável), mas o shell identifica os redirecionamentos para processamento posterior antes que as variáveis sejam expandidas.
Em outras palavras, quando as variáveis são expandidas, é "muito tarde" para que um caractere de redirecionamento ( <
ou >
, etc.) seja considerado, porque o shell já identificou quais partes do comando o utilizam vai tratar como redirecionamentos.
Para ler mais, veja os passos 1 e 3 listados abaixo:
LESS='+/^SIMPLE COMMAND EXPANSION' man bash