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