#escaping #quote #shell-escape


Escape and unescape strings with shell-inspired quoting

5 unstable releases

0.3.1 Oct 28, 2021
0.3.0 Jan 29, 2020
0.2.0 Jan 3, 2019
0.1.1 Dec 30, 2018
0.1.0 Jul 13, 2018

#206 in Text processing

Download history 5302/week @ 2023-12-11 5041/week @ 2023-12-18 3370/week @ 2023-12-25 4011/week @ 2024-01-01 5668/week @ 2024-01-08 5729/week @ 2024-01-15 6117/week @ 2024-01-22 5707/week @ 2024-01-29 4128/week @ 2024-02-05 4126/week @ 2024-02-12 5000/week @ 2024-02-19 6262/week @ 2024-02-26 5043/week @ 2024-03-04 5842/week @ 2024-03-11 6506/week @ 2024-03-18 5773/week @ 2024-03-25

23,495 downloads per month
Used in 127 crates (54 directly)


354 lines


Build Status


This library provides functions to escape and unescape strings.

It escapes them in a roughly 'sh' compatible way (e.g. double quotes supporting backslash escapes, single quotes supporting no escapes).

In addition, it provides support for common c-like ascii escapes (like \n for newline, \v for vertical tab, etc) and rust-string-like unicode (via \u{12ff} style escapes).

More importantly, this library also provides the ability to un-escape a given escaped text to recover the original string.

For more information on usage and what escape sequences will work, see the docs.


snailquote intends to explicitly be compatible with the following use-cases:

  1. Readable encoding of arbitrary strings for user's editing; re-parsing of said strings after being edited.
  2. Reading and writing the values of os-release files.

Other files may have a similar shell-inspired format that snailescape works with, but it's up to you to verify it really is similar enough to be correct.

snailquote is inspired by, but not compatible with, the following:

  1. gnulib quotearg, as used for 'ls' output -- snailquote handles unicode escapes differently.
  2. ANSI-c string literal quoting -- snailquote handles unicode differently and supports shell-related escapes, like '$'.
  3. sh string quoting -- snailquote handles unicode differently and is more lax about shell special characters.

Why not use <other library>

Other libraries in rust I've found have one or more of the following problems:

  1. The escaped text is not as easily human-editable
  2. There is no way to un-escape text
  3. NIH


~23K SLoC