u-boot/doc/usage/cmd/setexpr.rst
Tom Rini 11da3403e9 doc: usage: Add general rule for $?
For nearly all commands in U-Boot the '?' variable is handled the same
way with 0 meaning success, 1 meaning any failure.  Explain this in the
general rules section of the cmdline documentation (with a link to a
counter example) and then remove the redundant wording from most
commands. We retain a section about the return value in a number of
places where we are doing something such as always returning a specific
value or we have useful additional information to go along with the
normal return codes.

Signed-off-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
2025-10-26 09:03:35 -06:00

150 lines
3.2 KiB
ReStructuredText

.. SPDX-License-Identifier: GPL-2.0+
.. index::
single: setexpr (command)
setexpr command
===============
Synopsis
--------
::
setexpr[.b, .w, .l .s] <name> [*]<value> <op> [*]<value2>
setexpr[.b, .w, .l] <name> [*]<value>
setexpr <name> fmt <format> [value]...
setexpr <name> gsub r s [t]
setexpr <name> sub r s [t]
Description
-----------
The setexpr command is used to set an environment variable to the result
of an evaluation.
setexpr[.b, .w, .l .s] <name> [*]<value> <op> [*]<value2>
Set environment variable <name> to the result of the evaluated
expression specified by <op>.
setexpr[.b, .w, .l] name [*]value
Load <value> into environment variable <name>
setexpr name fmt <format> value
Set environment variable <name> to the result of the C like
format string <format> evaluation of <value>.
setexpr name gsub <r> <s> [<t>]
For each substring matching the regular expression <r> in the
string <t>, substitute the string <s>.
The result is assigned to <name>.
If <t> is not supplied, use the old value of <name>.
If no substring matching <r> is found in <t>, assign <t> to <name>.
setexpr name sub <r> <s> [<t>]
Just like gsub(), but replace only the first matching substring
The setexpr command takes the following arguments:
format
This parameter contains a C or Bash like format string.
The number of arguments is limited to 4.
The following format types are supported:
c
single character
d, i
decimal value
o
octal value
s
string
u
unsigned decimal value
x, X
hexadecimal value
'%'
no conversion, instead a % character will be written
Backslash escapes:
\" = double quote
\\ = backslash
\a = alert (bell)
\b = backspace
\c = produce no further output
\f = form feed
\n = new line
\r = carriage return
\t = horizontal tab
\v = vertical tab
\NNN = octal number (NNN is 0 to 3 digits)
name
The name of the environment variable to be set
op
'|'
name = value | value2
'&'
name = value & value2
'+'
name = value + value2
(This is the only operator supported for strings.
It acts as concatenation operator on strings)
'^'
name = value ^ value2
'-'
name = value - value2
'*'
name = value * value2
'/'
name = value / value2
'%'
name = value % value2
r
Regular expression
s
Substitution string
t
string
value
Can either be an integer value, a string.
If the pointer prefix '*' is given value is treated as memory address.
value2
See value
Example
-------
::
=> setexpr foo fmt %d 0x100
=> echo $foo
256
=>
=> setexpr foo fmt 0x%08x 63
=> echo $foo
0x00000063
=>
=> setexpr foo fmt %%%o 8
=> echo $foo
%10
=>
Configuration
-------------
* The *setexpr* command is only available if CMD_SETEXPR=y.
* The *setexpr fmt* sub-command is only available if CMD_SETEXPR_FMT=y.
* The *setexpr gsub* and *setexpr sub* sub-commands are only available
if CONFIG_REGEX=y. For an overview of the supported regex syntax,
see :doc:`test`.