On 7/3/20 2:15 AM, Rob Landley wrote: > Ok, with a string, the start being off the left or right edges resolves to > empty > string, but end before start is an error. Length being zero is fine. A window > including the end of the string gives the right edge of the string, a window > including the left edge of the string gives nothing? > > With an array, the first argument being negative is the usual "from end", the > second argument being negative is an ERROR? (What?) And the same arguments off > left edge produces no output even when the window advances into range with > stuff > in it, but arguments off right edge clip to show you what it can.
Except arrays index from _1_ not from _0_, and the FUN part is: $ xx() { echo ${*:0};}; xx a b c bash a b c Which means that ${*} is actually ${*:1} and NOT showing all the available data that must nevertheless be present in the array. Except that's also wrong because $0 isn't showing "xx", it's saying "bash". It's showing the arguments to the function (not the shell) but the name of the shell (not the function): $ bash -c 'echo $0 $*; xx() { echo $0 $*;}; xx ONE TWO THREE' a b c a b c a ONE TWO THREE Which is what $0 always does, with the extra weirdness that the first argument to the shell replaces the name (and if there's only one there are no arguments), but the first argument to a shell function is an argument and the name of the function isn't recorded in this at all.... it's $FUNCNAME. (Which is an array but in this instance that can be ignored.) Great. > *shrug* To me, this is a pile of arbitrary behavior. Easiest way to deal with this is probably special casing 0 in the ${*:0:47} slice. (And I think my version is handling ${*:-2} with the same "walk back from end" logic because it would be extra code NOT to for me...) Rob _______________________________________________ Toybox mailing list Toybox@lists.landley.net http://lists.landley.net/listinfo.cgi/toybox-landley.net