Exporte o valor pelo ambiente e, em seguida, faça com que o shell interno o expanda. Assumindo que o shell de login do username é do tipo Bourne:
$ export path_value=/home/username/filename\.class
$ su username -c 'echo "$path_value"'
/home/username/filename$1.class
Isso funcionará mesmo que a variável contenha aspas, mas não funcionará se o comando usado limpar o ambiente. Eu não acho que su deva fazer isso, mas sudo pode.
Se sabemos que a variável não pode conter aspas simples², então seria apenas uma citação simples da string expandida no shell interno:
$ path_value=/home/username/filename\.class
$ su username -c "echo '$path_value'"
/home/username/filename$1.class
(Observe que as aspas estão na ordem oposta).
¹ se o shell de login do username for csh ou tcsh , substitua echo "$path_value" por echo $path_value:q ; se for rc ou derivativo, com echo $path_value .
² e caracteres de nova linha se o shell de login do usuário for csh ou tcsh e não contiver bytes que não formam caracteres válidos se o shell de login do usuário for yash . Tenha também em atenção que os argumentos iniciados por - ou contendo barras invertidas seriam um problema com echo , é melhor usar printf '%s\n' para dados arbitrários