Originally Posted by pinniped
Why would you expect different behavior? 'rar' is behaving as documented in the manual.
You can do:
for X in $(ls *.rar); do rar x $X; done
I don't know what the issue is, and I really don't feel like investigating it because that's what for loops are for, anyway.
I can tell you for sure that the wildcard expansion is done at shell level, *before* rar or unrar gets into scene, so that shouldn't be a problem.
Also, I don't want to sound pedant, but I would change your for loop a bit. ls is completely unnecesary, and you should *always* quote filenames unless you are really certain that they will contain no blank spaces or the like.
for X in *.rar; do rar x "$X"; done