Expressions and Substitutions
Various operators and function calls are supported in expressions, which may be
used in assignments, default recipe arguments, and inside recipe body {{…}}
substitutions.
tmpdir := `mktemp -d`
version := "0.2.7"
tardir := tmpdir / "awesomesauce-" + version
tarball := tardir + ".tar.gz"
config := quote(config_dir() / ".project-config")
publish:
rm -f {{tarball}}
mkdir {{tardir}}
cp README.md *.c {{ config }} {{tardir}}
tar zcvf {{tarball}} {{tardir}}
scp {{tarball}} me@server.com:release/
rm -rf {{tarball}} {{tardir}}
Concatenation
The +
operator returns the left-hand argument concatenated with the
right-hand argument:
foobar := 'foo' + 'bar'
Logical Operators
The logical operators &&
and ||
can be used to coalesce string
values1.37.0, similar to Python’s and
and or
. These operators
consider the empty string ''
to be false, and all other strings to be true.
These operators are currently unstable.
The &&
operator returns the empty string if the left-hand argument is the
empty string, otherwise it returns the right-hand argument:
foo := '' && 'goodbye' # ''
bar := 'hello' && 'goodbye' # 'goodbye'
The ||
operator returns the left-hand argument if it is non-empty, otherwise
it returns the right-hand argument:
foo := '' || 'goodbye' # 'goodbye'
bar := 'hello' || 'goodbye' # 'hello'
Joining Paths
The /
operator can be used to join two strings with a slash:
foo := "a" / "b"
$ just --evaluate foo
a/b
Note that a /
is added even if one is already present:
foo := "a/"
bar := foo / "b"
$ just --evaluate bar
a//b
Absolute paths can also be constructed1.5.0:
foo := / "b"
$ just --evaluate foo
/b
The /
operator uses the /
character, even on Windows. Thus, using the /
operator should be avoided with paths that use universal naming convention
(UNC), i.e., those that start with \?
, since forward slashes are not
supported with UNC paths.
Escaping {{
To write a recipe containing {{
, use {{{{
:
braces:
echo 'I {{{{LOVE}} curly braces!'
(An unmatched }}
is ignored, so it doesn’t need to be escaped.)
Another option is to put all the text you’d like to escape inside of an interpolation:
braces:
echo '{{'I {{LOVE}} curly braces!'}}'
Yet another option is to use {{ "{{" }}
:
braces:
echo 'I {{ "{{" }}LOVE}} curly braces!'