On Mon, Jun 03, 2024 at 01:11:57PM -0500, David Wright wrote: > On Mon 03 Jun 2024 at 10:32:16 (-0400), Greg Wooledge wrote: > > duhs() ( > > shopt -s dotglob > > printf '%s\0' "${1:-.}"/*/ | xargs -0 du -sh > > ) > > > > I'm not personally fond of this. It's extremely easy to overlook > > the fact that the curly braces have been replaced with parentheses,
> I guess minimalists would make a one-liner out of that. > Myself, I prefer verbosity, and the ability to search and find > all my functions with /function.*{$ in less. For example, > I write what is probably my most trivial function in .bashrc as: > > function _Cat_ { > cat > } > > rather than: > > _Cat_() { cat; } ... I feel like you've just exemplified what I was talking about, missing the fact that the curly braces were replaced with parentheses around the function body to force a subshell every time it's called. It had nothing to do with how many lines of code were used. I could have written them as duhs() { (shopt -s dotglob; printf '%s\0' "${1:-.}"/*/ | xargs -0 du -sh); } and duhs() (shopt -s dotglob; printf '%s\0' "${1:-.}"/*/ | xargs -0 du -sh) and the same point would have applied. > function _Cat_ { Do note that the "function" keyword is a bash/ksh extension, and not part of POSIX sh syntax. In bash, "x()" and "function x" are identical in behavior. In ksh, they cause two different kinds of variable scoping behavior. Bash also allows "function x()" which ksh does not. Just for the record.