The syntax is not correct. The correct expression is [position()=sql:variable("@var")]. Here is an example:
DECLARE @x XML, @cnt INT
SELECT @x = '
<a>
<n>node 1</n>
<n>node 2</n>
<n>node 3</n>
</a>'
SELECT @cnt = 1
WHILE @cnt <= 3 BEGIN
SELECT @x.value('(/a/n[position()=sql:variable("@cnt")])[1]','VARCHAR(20)')
SELECT @cnt = @cnt + 1
END
/*
Prints
node 1
node 2
node 3
*/
.