I can only assume that the variable substitution algorithm simply extracts the variable names from the %…% expression and searches for them on the pipeline.
In your case InputList[pos] is not a variable name. InputList and pos are, but not InputList[pos].
The second example (%InputList[%pos%]% ) can also be read differently.
Two variables %InputList[% and %]% with the pos string in the middle
Again, this is only an assumption, I haven’t checked in detail the documentation.
If I understand your requirement correctly you have a input say inputItemList which will be a string list and you have to select a random value from this list
eg:
INPUT: inputItemList= {1,2,3,4,5}
OTUPTU: item=2 or 3 or 4 or random value