On Wed, May 29, 2024 at 09:44:40PM +0800, Kent Gibson wrote: > On Wed, May 29, 2024 at 04:27:00PM +0300, Andy Shevchenko wrote: > > On Wed, May 29, 2024 at 09:18:47PM +0800, Kent Gibson wrote: > > > On Wed, May 29, 2024 at 04:08:49PM +0300, Andy Shevchenko wrote: > > > > On Tue, May 28, 2024 at 07:39:10AM +0800, Kent Gibson wrote: > > > > > On Mon, May 27, 2024 at 07:17:37PM +0300, Andy Shevchenko wrote: > > > > > > On Mon, May 27, 2024 at 08:44:20PM +0800, Kent Gibson wrote: > > > > > > > On Mon, May 27, 2024 at 02:02:34PM +0200, Bartosz Golaszewski wrote: ... > > > > > > > > assert_fail() { > > > > > > > > - $* || return 0 > > > > > > > > - fail " '$*': command did not fail as expected" > > > > > > > > + "$@" || return 0 > > > > > > > > + fail " '$@': command did not fail as expected" > > > > > > > > } > > > > > > > > > > > > > > Ironically, shellcheck doesn't like the '$@' in the fail string[1], so you > > > > > > > should use $* there. > > > > > > > > > > > > But why does it do like this? > > > > > > > > > > Read the link[1]. > > > > > > > > Okay, this is only for some debug / error messages. Still if one wants to have > > > > clear understanding on what has been passed to some function, $* is not a > > > > correct option. Also note the single quotes, shouldn't that protect from the > > > > arguments loss? > > > > > > That's right - I was only referring to this particular case where a > > > string is being constructed. Wasn't that clear? > > > > I meant that if you want to have this knowledge in the debug / error message, > > you will fail with $*, that's why I consider shellcheck is incorrect. > > > > Ex. > > > > I have > > > > foo bar "baz bar2" > > > > and I want > > > > "ERROR: 'foo bar "baz bar2"' failed" > > > > type of message. > > > > Fair point, but $@ doesn't give you that either: > > boo() { > echo "star '$*'" > echo "hash '$@'" > } > > boo foo bar "baz bar2" > > gives: > > star 'foo bar baz bar2' > hash 'foo bar baz bar2' Oh, this is unfortunate. It seems entire model with quotation depends on the commands, printf makes it different, print -r -- makes it better, though, if one uses non-space IFS for it. > Is there any form that gives you the format you want? Yes, but it requires an iteration over arguments, roughly something like below (which is not yet what I want, but closer): for a in "$@"; do echo -n '"$a" ' # echo -n seems not portable IIRC done echo -- With Best Regards, Andy Shevchenko