xref: /curl/docs/cmdline-opts/_VARIABLES.md (revision e455490c)
1<!-- Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. -->
2<!-- SPDX-License-Identifier: curl -->
3# VARIABLES
4curl supports command line variables (added in 8.3.0). Set variables with
5--variable name=content or --variable name@file (where `file` can be stdin if
6set to a single dash (-)).
7
8Variable contents can be expanded in option parameters using `{{name}}` if the
9option name is prefixed with `--expand-`. This gets the contents of the
10variable `name` inserted, or a blank if the name does not exist as a
11variable. Insert `{{` verbatim in the string by prefixing it with a backslash,
12like `\{{`.
13
14You an access and expand environment variables by first importing them. You
15can select to either require the environment variable to be set or you can
16provide a default value in case it is not already set. Plain --variable %name
17imports the variable called 'name' but exits with an error if that environment
18variable is not already set. To provide a default value if it is not set, use
19--variable %name=content or --variable %name@content.
20
21Example. Get the USER environment variable into the URL, fail if USER is not
22set:
23
24    --variable '%USER'
25    --expand-url = "https://example.com/api/{{USER}}/method"
26
27When expanding variables, curl supports a set of functions that can make the
28variable contents more convenient to use. It can trim leading and trailing
29white space with `trim`, it can output the contents as a JSON quoted string
30with `json`, URL encode the string with `url` or base64 encode it with `b64`.
31To apply functions to a variable expansion, add them colon separated to the
32right side of the variable. Variable content holding null bytes that are not
33encoded when expanded cause error.
34
35Example: get the contents of a file called $HOME/.secret into a variable
36called "fix". Make sure that the content is trimmed and percent-encoded when
37sent as POST data:
38
39    --variable %HOME
40    --expand-variable fix@{{HOME}}/.secret
41    --expand-data "{{fix:trim:url}}"
42    https://example.com/
43
44Command line variables and expansions were added in 8.3.0.
45