[PATCH 01/11] cmd: test: add support for =~ operator

Rasmus Villemoes ravi at prevas.dk
Tue May 6 21:07:05 CEST 2025


On Tue, May 06 2025, Tom Rini <trini at konsulko.com> wrote:

> On Tue, May 06, 2025 at 10:49:31AM -0600, Tom Rini wrote:
>> On Tue, May 06, 2025 at 04:10:25PM +0200, Rasmus Villemoes wrote:
>> 
>> > Currently, the only way to make use of regex matching in the shell is
>> > by using "setexpr [g]sub" command. That's rather awkward for asking
>> > whether a string matches a regex. At the very least, it requires
>> > providing setexpr with a dummy target variable, but also, the return
>> > value of setexpr doesn't say whether any substitutions were done, so
>> > one would have to do some roundabout thing like
>> > 
>> >   env set dummy "${string_to_test}"
>> >   setexpr sub dummy '<some regex>' ''
>> >   if test "${dummy}" != "${string_to_test}" ; then ...
>> > 
>> > When CONFIG_REGEX is set, teach the test command a new operator, =~,
>> > which will allow one to more naturally write
>> > 
>> >   if test "${string_to_test}" =~ '<some regex>' ; then ...
>> > 
>> > Signed-off-by: Rasmus Villemoes <ravi at prevas.dk>
>> 
>> We should also mention here (and then in docs) that this the same as the
>> =~ operator in bash, which I only learned about now as part of answering
>> my own question of "Are people going to expect =~ to do something
>> else?".
>> 
>> With that,
>> 
>> Reviewed-by: Tom Rini <trini at konsulko.com>
>
> Oh, and we should update doc/usage/cmd/setexpr.rst at least and we
> should have one for test as well, but don't, yet.

Yes, if test.rst had already existed I would have updated it, but I
didn't feel like writing the whole thing from scratch until I had a
sense of whether these were going anywhere. I'll take a stab at it,
including the bash ref, but I'm not sure what you want to put in
setexpr.rst? Perhaps a reference to test.rst for an overview of what
regex features are available so they don't need to be repeated?

Another thing I considered was to have the 'test foo =~ ...' thing
populate shell variables $1, $2, ... with the capture groups, if any;
and possibly even $0 with "what matched the whole thing", as U-Boot
doesn't really have anything sensible for that.

Rasmus


More information about the U-Boot mailing list