---
title: std.basename
summary: null
url: >-
  https://www.fastly.com/documentation/reference/vcl/functions/strings/std-basename
---

```
STRING std.basename(STRING s)
```

**Available in:** all subroutines

Breaks a pathname into the filename component and returns it. A pathname is a
forward slash-separated list of directory names followed by either a directory
name or a filename. Trailing `/` characters are not counted as part of the
pathname. Both relative and absolute pathnames are allowed. Relative pathnames
may use a single dot (.) or double dots (..) to represent the current directory
or the parent directory respectively.

In the usual case, `std.basename` returns the component following the final
`/`: for example, `std.basename("/foo/bar/foobar")` is `"foobar"`.

If the pathname does not contain a forward slash, then `std.basename` returns a
copy of the pathname: for example, `std.basename("foo")` is `"foo"`.

If the pathname only contains one or more forward slashes, then `std.basename`
returns the string `"/"`: for example, `std.basename("/")` is `"/"`.

If the pathname is an empty string `""`, then `std.basename` returns the string
`"."`. The same behavior applies if `std.basename` is invoked with a _not-set_
header for the pathname: for example, `std.basename(req.http.Not-Set)` is
`"."`.

Concatenating the string returned by
`std.dirname()`, a `"/"`, and the string
returned by `std.basename` yields a complete pathname.

For example, `std.dirname("fastly.com/api") "/" std.basename("fastly.com/api")`
is `"fastly.com/api"`.

See `std.dirname()` for breaking a pathname
into the directory component.

This function conforms to
[POSIX.1-2001](https://en.wikipedia.org/wiki/POSIX#POSIX.1-2001).

## Examples

```vcl
std.basename("") # returns "."
std.basename("/usr/lib") # returns "lib"
std.basename("/usr/") # returns "usr"
std.basename("usr") # returns "usr"
std.basename("/") # returns "/"
std.basename(".") # returns "."
std.basename("..") # returns ".."
```
