mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-23 13:56:20 +00:00

In gsub, when the destination string is empty, the string 't' is provided and the regular expression doesn't match, then the final result is an empty string. Example: => echo ${foo} => setenv foo => setexpr foo gsub e a bar => echo ${foo} => The variable ${foo} should contain "bar" and the lack of match shouldn't be considered an error. This patch fixes the erroneous behavior by removing the return statement and breaking out of the loop in case of lack of match. Also add a test for the no match case. Signed-off-by: Massimiliano Minella <massimiliano.minella@se.com>
155 lines
3.3 KiB
ReStructuredText
155 lines
3.3 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.
|
|
|
|
Return value
|
|
------------
|
|
|
|
The return value $? is set to 0 (true) if the operation was successful.
|
|
|
|
If an error occurs, the return value $? is set to 1 (false).
|