commit 3cb50f98dbaad4ebedc44e8a08469ab6c53b4313 Spenser Truex <truex@equwal.com> 2025-09-08 21:52:21 -0700 Split up POSIX for for sanity
sh/for-array | 14 ++++++++++++++ sh/for-find | 15 ++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/sh/for-array b/sh/for-array new file mode 100644 index 0000000..fa27469 --- /dev/null +++ b/sh/for-array @@ -0,0 +1,14 @@ +# +# Yes, it really is this hard to do +# and it is broken on GNU non-POSIX non-+ support. +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} + +old=$(save "$@") +myarray=$(save "$@") +set -- foo bar baz boo +eval "set -- $myarray" +for i ; do <++> ; done +eval "set -- $old" diff --git a/sh/for-find b/sh/for-find index 61d45b8..ea93687 100644 --- a/sh/for-find +++ b/sh/for-find @@ -4,18 +4,15 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -# eg. -# myarray=$(save "$@") -# set -- foo bar baz boo -# eval "set -- $myarray" + findarray () { find "$@" -exec sh -c "for i do printf %s\\\\n \"\$i\" \\ | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\\$s/\\\$/' \\\\\\\\/\" done" dummy '{}' + } -# eg. -# old=$(save "$@") -# eval "set -- $(findarray path)" -# for i do command "$i" ; done -# eval "set -- $old" + +old=$(save "$@") +eval "set -- $(findarray path)" +for i do <++> ; done +eval "set -- $old"