From 331e89be990547b6e21ad1b6e56065bcda1ba053 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Mon, 26 Apr 2021 10:33:36 -0700 Subject: [PATCH] Fix bad warning for ${#arr[*]}. Fixes #2218. --- src/ShellCheck/Analytics.hs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ShellCheck/Analytics.hs b/src/ShellCheck/Analytics.hs index 97c0b27..e61c30a 100644 --- a/src/ShellCheck/Analytics.hs +++ b/src/ShellCheck/Analytics.hs @@ -823,12 +823,16 @@ prop_checkDollarStar3 = verifyNot checkDollarStar "[[ $* = 'a b' ]]" prop_checkDollarStar4 = verify checkDollarStar "for f in ${var[*]}; do ..; done" prop_checkDollarStar5 = verify checkDollarStar "ls ${*//foo/bar}" prop_checkDollarStar6 = verify checkDollarStar "ls ${var[*]%%.*}" +prop_checkDollarStar7 = verify checkDollarStar "ls ${*}" +prop_checkDollarStar8 = verifyNot checkDollarStar "ls ${#*}" +prop_checkDollarStar9 = verify checkDollarStar "ls ${arr[*]}" +prop_checkDollarStar10 = verifyNot checkDollarStar "ls ${#arr[*]}" checkDollarStar p t@(T_NormalWord _ [T_DollarBraced id _ l]) | not (isStrictlyQuoteFree (parentMap p) t) = do let str = concat (oversimplify l) when ("*" `isPrefixOf` str) $ warn id 2048 "Use \"$@\" (with quotes) to prevent whitespace problems." - when ("[*]" `isPrefixOf` (getBracedModifier str)) $ + when ("[*]" `isPrefixOf` (getBracedModifier str) && isVariableChar (headOrDefault '!' str)) $ warn id 2048 "Use \"${array[@]}\" (with quotes) to prevent whitespace problems." checkDollarStar _ _ = return ()