![如何将带有字符代码的字符串转换为引号形式](https://linux22.com/image/5348/%E5%A6%82%E4%BD%95%E5%B0%86%E5%B8%A6%E6%9C%89%E5%AD%97%E7%AC%A6%E4%BB%A3%E7%A0%81%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%BC%95%E5%8F%B7%E5%BD%A2%E5%BC%8F.png)
我有一个类似的字符串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")"