in the inferno shell, i added multi-variable assignment, which seems to address the issue that shift is most often used for.
for instance: % a = (a b c d) % (x y a) = $a % echo $x a % echo $y b % echo $a c d % to throw away a few dummy values from the start of the list, just use throwaway variable names. i doubt this would be too much trouble to implement in rc. (but who wants backwardly incompatible shell scripts?!)