我有一个类似的字符串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")"