如何将带有字符代码的字符串转换为引号形式

如何将带有字符代码的字符串转换为引号形式

我有一个类似的字符串New\x20Folder。特殊字符由其代码表示。我想将字符串转换为引号形式:"New Folder"

唯一可用的工具是 bash 和一堆标准实用程序,例如 sed。

第一种形式是由 udev 环境变量生成的ID_FS_LABEL_ENC。 autofs 配置文件使用所需的形式。它需要带引号的字符串。

答案1

假设反斜杠本身也在你的字符串中转义(\x5c大概是这样),这udev似乎是这样,你应该使用 Bash 的printf内置:

printf -v translated '"%b"' "$ID_FS_LABEL_ENC"

如果我们在您的示例字符串上尝试:

$ ID_FS_LABEL_ENC='New\x20Folder'
$ printf -v translated '"%b"' "$ID_FS_LABEL_ENC"
$ echo "Translated to: '$translated'"
Translated to: '"New Folder"'

我们得到您想要的转变。

printf -v将标准样式翻译的结果分配printf给变量,%b格式是执行反斜杠转义序列的 Bash 扩展。这不会受到任何名称包含奇怪但合法字符的有趣业务的影响,并且不需要重写字符串。

答案2

尝试这个:

string=$'New\x20Folder'

或者

string="New\x20Folder"
string="$(echo -e "$string")"

相关内容