#escaping #byte-slice #byte-string #shell-escape

smashquote

从字节字符串中删除类似 shell 的引号

3 个版本

0.1.2 2022 年 5 月 20 日
0.1.1 2022 年 5 月 20 日
0.1.0 2022 年 5 月 19 日

#525命令行界面

MIT OR Apache-2.0 OR GPL-3.0-or-later

28KB
530

smashquote

smashquote - 从字节切片中删除 C 样式引号

smashquote 从字节切片中删除 C 样式引号和转义序列。具体来说,它理解 bash 的 $'' 格式。与 snailquote 不同,smashquote 在字节切片上工作。它旨在用于命令行工具和参数解析,其中可能需要处理 OsString,而不是处理 unicode String。因此,smashquote 不一定产生有效的 Unicode。

例如,可能希望有一个 CLI 工具接受分隔符,如 xargs 或 cut。在这种情况下,用户在命令行上输入如 -d '\r\n' 这样的参数是方便的。smashquote 可以将它们转换为正确的字节序列。

特性

smashquote 理解以下反斜杠转义序列

  • \a - 警报/铃声 0x07
  • \b - 退格 0x08
  • \e - 转义 0x1B
  • \f - 表格 0x0C
  • \n - 换行 0x0A (Unix 换行符)
  • \r - 回车 0x0D
  • \t - 制表符 0x09 (水平制表符)
  • \v - 垂直制表符 0x0B
  • \\ - 反斜杠 0x5C (单个 \)
  • \' - 单引号 0x27 (单个 ')
  • \" - 双引号 0x22 (单个 ")
  • 0377 - 单个字节,以八进制指定。序列在第一个非十六进制数字处停止。
  • \x0\xFF - 一个字节,以十六进制指定。序列在第一个非十六进制数字的字符处停止。
  • \u0\uFFFF - 单个字符的 utf8 字节,以十六进制指定。序列在第一个非十六进制数字的字符处停止。
  • \u{0}\u{10FFFF} - 单个字符的 utf8 字节,以 Rust 风格的十六进制指定
  • U0UFFFFFFFF - 单个字符的 utf8 字节,以十六进制指定(当然,实际最大值是 10FFFF,因为这是当前有效的最大代码点)。序列在第一个非十六进制数字的字符处停止。
  • \c@\cA\cZ\c[\c\\c]\c^\c_ - 控制字符(不区分大小写)0x00x1F
  • \c`\ca\cz\c{\c|\c}\c~ - 控制字符(与上面相同)0x00x1F

smashquote 产生的错误与 anyhow 等crate兼容。

致谢

感谢 Zoybeanzkat 在各种编码问题和改进建议方面的帮助。

许可:MIT OR Apache-2.0 OR GPL-3.0-or-later

无运行时依赖