STRING-ESCAPE(1) fish-shell STRING-ESCAPE(1)

# [NAME](#NAME)

string-escape - escape special characters

# [SYNOPSIS](#SYNOPSIS)

```
string escape [-n | --no-quoted] [--style=] [STRING ...]
string unescape [--style=] [STRING ...]
```

# [DESCRIPTION](#DESCRIPTION)

**string escape** escapes each *STRING* in one of several ways.

**--style=script** (default) alters the string such that it can be passed back to **eval** to produce the original argument again. By default, all special characters are escaped, and quotes are used to simplify the output when possible. If **-n** or **--no-quoted** is given, the simplifying quoted format is not used. Exit status: 0 if at least one string was escaped, or 1 otherwise.

**--style=var** ensures the string can be used as a variable name by hex encoding any non-alphanumeric characters. The string is first converted to UTF-8 before being encoded.

**--style=url** ensures the string can be used as a URL by hex encoding any character which is not legal in a URL. The string is first converted to UTF-8 before being encoded.

**--style=regex** escapes an input string for literal matching within a regex expression. The string is first converted to UTF-8 before being encoded.

**string unescape** performs the inverse of the **string escape** command. If the string to be unescaped is not properly formatted it is ignored. For example, doing **string unescape --style=var (string escape --style=var $str)** will return the original string. There is no support for unescaping **--style=regex**.

# [EXAMPLES](#EXAMPLES)

```
>_ echo \x07 | string escape
\cg
>_ string escape --style=var 'a1 b2'\u6161
a1_20_b2_E6_85_A1_
```

# [Copyright](#Copyright)

fish-shell developers

October 12, 2026 4.9

---

Document: string-escape(1) from fish 4.9.3-r2 (Chainguard OS)
Source: https://github.com/fish-shell/fish-shell
