O programa sftp é sua própria coisa; é completamente independente e não relacionada a bash , que conhece o valor de suas variáveis e expande $yr . Em geral, você não pode passar variáveis bash para programas externos como esse, sem métodos de comunicação específicos para aplicativos.
Se você quiser apenas carregar ou baixar um arquivo com $yr no nome do arquivo, use scp , algo como:
yr=$(date +%Y)
scp -i key.pem un@server:/some/long/path/that/includes/$yr .
para download ou
scp -i key.pem some_local_file un@server:/some/long/$yr/path
para upload.
Se, por algum motivo, você realmente precisar usar sftp especificamente, poderá criar um arquivo em lote dinamicamente, por exemplo,
sftp -i key.pem -b - un@server <<< "get /some/path/with/$yr"