Fix $@ vs $* in MATCH and similar functions #193
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The variables
$@
and$*
differ subtly in how they are expanded.$*
expands to a single value with all the arguments of the program or function joined with spaces, or by the first character of the$IFS
variable, to be precise.Usually
$*
is used in messages where the individual arguments and their count is irrelevant.$@
is just like$*
, except when in double-quoted string"$@"
. This form expands to multiple values, properly quoted, so that one set of arguments can be passed safely and correctly into another function.The aforementioned macros,
FATAL
,ERROR
,MATCH
andNOMATCH
all used$@
where$*
was expected, and thus only really worked with a single value.The case of
MATCH
andNOMATCH
is more subtle, as usually a single pattern is provided. In general,$*
should be used in those cases as$@
does not really do anything different in the error case (the message is the same) but the code is somewhat on the edge of correctness so I chose to adjust them as well.