On 02/05/2018 06:33 PM, R0b0t1 wrote: > On Sun, Feb 4, 2018 at 10:45 PM, Zac Medico <zmed...@gentoo.org> wrote: >> On 02/04/2018 07:22 PM, R0b0t1 wrote: >>> diff --git a/bin/isolated-functions.sh b/bin/isolated-functions.sh >>> index b28e44f18..377b32d90 100644 >>> --- a/bin/isolated-functions.sh >>> +++ b/bin/isolated-functions.sh >>> @@ -82,7 +82,7 @@ __dump_trace() { >>> lineno=${BASH_LINENO[${n} - 1]} >>> # Display function arguments >>> args= >>> - if [[ -n "${BASH_ARGV[@]}" ]]; then >>> + if [[ -n "${BASH_ARGV[*]}" ]]; then >> >> I feel like the shellcheck authors might be willing to accept [[ -n >> ${BASH_ARGV[@]} ]] or [[ ${BASH_ARGV[@]} ]] as correct, since the >> "Problematic code" that they cite involves an incorrect comparison: >> >> https://github.com/koalaman/shellcheck/wiki/SC2199#problematic-code >> > > This example might be more illustrative: > > argc () { > echo $# > } > > argc "${BASH_ARGV[*]}" > argc "${BASH_ARGV[@]}" > > > Output (./test.sh a b): > > 1 > 2 > > > Which changes the semantics of the tests in which it is present. It is > hard to know what [[ is doing; if the same is attempted with [ it > would be an error for the same reason that globbing produces errors. > See: > > [ "${BASH_ARGV[*]}" ] > [ "${BASH_ARGV[@]}" ] # Fails; [: b: unary operator expected > [[ "${BASH_ARGV[*]}" ]] > [[ "${BASH_ARGV[@]}" ]] > > > It is possible [[ ignores the extra elements. I can't think of a > reason where this would make the results of the test different. At the > same time, it might give people the wrong impression of the operation > of [. > > In the sense that [ and [[ represent test(1), anything but the "[*]" > expansion is incorrect, as the error message indicates. That [[ treats > its arguments specially because it is a feature of the syntax just > makes the situation more confusing.
I've turned this into an optimization by testing the array length instead of expanding the elements: https://gitweb.gentoo.org/proj/portage.git/commit/?id=2306b8f4a2d781db87ee61707f6dea1c5f717936 -- Thanks, Zac
signature.asc
Description: OpenPGP digital signature