Supondo que as barras invertidas em si também são escapadas em suas strings (como \x5c
, presumivelmente), o que udev
parece fazer, você deve usar o Bash's printf
builtin :
printf -v translated '"%b"' "$ID_FS_LABEL_ENC"
Se tentarmos isso em sua string de exemplo:
$ ID_FS_LABEL_ENC='New\x20Folder'
$ printf -v translated '"%b"' "$ID_FS_LABEL_ENC"
$ echo "Translated to: '$translated'"
Translated to: '"New Folder"'
temos a transformação que você queria.
printf -v
atribui o resultado de uma conversão padrão em printf
a uma variável e o formato %b
é uma extensão Bash que executa sequências de escape de barra invertida. Isso não é suscetível a nenhum negócio estranho com nomes que contenham caracteres estranhos, mas legítimos, e não exija reescrever a string.