I haven't read your whole message yet, but to unshift a new value in front of the positional params, all you have to do is this: set -- "$new" "$@" And now $1 is "$new", $2 is whatever $1 used to be, and so on. On Mon, Apr 1, 2024 at 9:52 AM Ray Andrews wrote: > Can we unshift the positional params? I have a complex function that has > shifts throughout and at one point there's a while loop: > > shift > while [ "$1" ]; do > if [ a ]; then b; c fi > if [ d ]; then e; f fi > if [ g ]; then h; i fi > ... > shift > done > > ... works fine, but I'm thinking to restructure it: > > shift > while [ "$1" ]; do > if [ a ]; then b; c; continue fi > if [ d ]; then e; f; continue fi > if [ g ]; then h; i; continue fi > ... > shift > done > > ... because only one 'if' test will be relevant per loop and the remaining > 'if' tests might even do some bad stuff. The problem of course is that if > I 'continue', the final 'shift' is missed. I could do this: > > # shift > while [ "$2" ]; do > shift > if [ a ]; then b; c; continue fi > if [ d ]; then e; f; continue fi > if [ g ]; then h; i; continue fi > ... > # shift > done > > ... except that the leading (commented) 'shift' might happen in any number > of places and changing them all would be troublesome. It can be done of > course, but I'm wondering if we have some way of faking this: > > shift > unshift > while [ "$1" ]; do > shift > if [ a ]; then b; c; continue fi > if [ d ]; then e; f; continue fi > if [ g ]; then h; i; continue fi > ... > # shift > done > > ... it looks pointless above, however note that the leading 'shift' might > in fact have happened in any one of several different places all of which > would need to be reworked and it's fragile, so the 'unshift' would take > care of it in one place, at least temporarily. I know we don't have an > official unshift, but can it be faked? Of course there's also this: > > ... > if [ a ]; then b; c; shift; continue fi > ... > > ... but I'm wondering about a more succinct logic. The quick and dirty > 'unshift' idea would solve a temporary problem very nicely. > > > > -- Mark J. Reed