The bnd macro language has a native format for lists. A bnd list is a string with comma separated values. For example, a,b,c
is a list with 3 members. Many macros can provide lists of internal information and many macros can process a list.
For example, ${lsr;.}
is the list of file and directory names in the same directory as the bnd file.
This contains also files that start with a .
(dot). If you want to reject all files that start with a dot:
${reject;${lsr;.};\..*}
The ${reject;list;regex}
macro takes a list and a regular expression and rejects any matching member. This is unfortunately due to historic reasons not a GLOB. There is also a similar `${select;list;regex} that only returns the matching members.
${select;alfa,beta,charlie,delta, echo;.*ch.*} -> charlie,echo
There are many macros that can manipulate lists:
-
[n]sort
– Sort a list alphabetically or numerically -
uniq
– Remove duplicates -
[n]min/[n]max
– max or min value alphabetically or numerically. -
size
– Get the size of a list -
[s]join
– Join lists -
sum/average
– Sum or average the values in a list -
foreach
– Calls a macro for each value and provides the index -
[last]indexof
– Return the index of an element in a list -
last/first
– Get last/first element -
get
– Get an element at a specific place -
replacelist
– Replace matching elements with a value, providing access to the groups in the original value -
sublist
– Get a sublist -
reverse
– Reverse a list -
retainall
– Retain only elements in both lists
A list is always comma separated. If you need to create a list from a string that uses another separator, you can use the split
macro.
${last;${split;\.;com.example.foo.bar}} -> bar
Don’t forget that in the bnd editor, you can hover over a selected text with macros to see the expanded form.