STRING-LENGTH(1) fish-shell STRING-LENGTH(1)

# [NAME](#NAME)

string-length - print string lengths

# [SYNOPSIS](#SYNOPSIS)

```
string length [-q | --quiet] [-V | --visible] [STRING ...]
```

# [DESCRIPTION](#DESCRIPTION)

**string length** reports the length of each string argument in characters. Exit status: 0 if at least one non-empty *STRING* was given, or 1 otherwise.

With **-V** or **--visible**, it uses the visible width of the arguments. That means it will discount escape sequences fish knows about, account for $fish\_emoji\_width and $fish\_ambiguous\_width. It will also count each line (separated by **\\n**) on its own, and with a carriage return (**\\r**) count only the widest stretch on a line. The intent is to measure the number of columns the *STRING* would occupy in the current terminal.

# [EXAMPLES](#EXAMPLES)

```
>_ string length 'hello, world'
12
>_ set str foo
>_ string length -q $str; echo $status
0
# Equivalent to test -n "$str"
>_ string length --visible (set_color red)foobar
# the set_color is discounted, so this is the width of "foobar"
6
>_ string length --visible 🐟🐟🐟🐟
# depending on $fish_emoji_width, this is either 4 or 8
# in new terminals it should be
8
>_ string length --visible abcdef\r123
# this displays as "123def", so the width is 6
6
>_ string length --visible a\nbc
# counts "a" and "bc" as separate lines, so it prints width for each
1
2
```

# [Copyright](#Copyright)

fish-shell developers

September 9, 2026 4.9

---

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