{echo} evaluates the expression written after its name and prints the value.
The whole text up to the closing brace is one expression - it is not split into parameters -
so {echo $price * $qty}, {echo $n gt 1 ? 'items' : 'item'} and
{echo 'Hello ' . $name} all work. A quoted text is a literal: {echo 5 + 3}
prints 8, {echo '5 + 3'} prints the text itself.
It is the tag to put in front of a pipe when the value is a literal or an expression:
{echo $text | trim | upper}, {echo $value | + 1} (an arithmetic pipe
needs the space after its operator). A field can be piped directly as well -
{$name | upper} - and that is the difference that matters: the field tag runs
the sanitize chain, {echo} does not. {echo $html} writes the value as
it stands, markup and all, so use {$html} for anything a visitor typed and keep
{echo} for values the application made itself.
A value is text, never template code: with $v = '{php:getcwd}',
{echo $v} prints those characters rather than running them. TRUE prints as
1, FALSE and NULL as nothing.
Under the strict syntax check an {echo} with nothing before its first pipe -
or nothing at all - is an error, as is an undefined field or a pipe function that does not
exist.