\define test1(a b)
<$list filter="[[$a$]] [[$b$]] +[limit[1]]" emptyMessage="c"></$list>
\end
\define test2(a b)
<$list filter="[enlist[$a$]] [enlist[$b$]] +[limit[1]]" emptyMessage="c"></$list>
\end
!! Test 1
1. <<test1 a:A b:B>> <br>
2. <<test1 a:A b:"">> <br>
3. <<test1 a:"" b:B>> <br>
4. <<test1 a:"" b:"">> <br>
!!Test 2
1. <<test2 a:A b:B>> <br>
2. <<test2 a:A b:"">> <br>
3. <<test2 a:"" b:B>> <br>
4. <<test2 a:"" b:"">> <br>
Test 1
1. A
2. A
3.
4.
Test 2
1. A
2. A
3. B
4. c
The difference is due to the enlist filter. In the first test case, [[]] is parsed as a tiddler title with the empty string "" as it's value. Weird, but it's still added to the input title list of the filter. But in the enlist filter, it does string parsing to determine all the titles in the parameter, and it determines there aren't any in the param, so it doesn't add anything to the list of input tiddlers titles.
Thus the final is [subfilter<filterinput>]
Regards
tony
<$set name="fieldValue" filter="[[TiddlerA]get[text]removeprefix[prefix]]">
<$set name="filterInput" filter="[subfilter<fieldValue>get[fieldname]]">
<$text text=<<filterInput>>/>
</$set>
</$set>
<$set name="fieldValue" filter="[[TiddlerA]get[text]removeprefix[prefix]get[fieldname]]">
<<fieldValue>>
</$set>