Como transformar uma string com códigos de caracteres em um formato de cotação

2

Eu tenho uma string como New\x20Folder . Caracteres especiais são representados por seus códigos. Gostaria de transformar a string em formato de cotação: "New Folder" .

As únicas ferramentas disponíveis são o bash e o monte de utilitários padrão como o sed.

O primeiro formulário é produzido pela variável de ambiente do udev ID_FS_LABEL_ENC . O formulário necessário é consumido pelo arquivo de configuração do autofs. Espera strings citadas.

    
por ayvango 19.03.2015 / 07:15

2 respostas

2

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.

    
por 19.03.2015 / 07:44
1

Tente isto:

string=$'New\x20Folder'

ou

string="New\x20Folder"
string="$(echo -e "$string")"
    
por 19.03.2015 / 07:32