From fe25a2b00e79a9be4371496541b5b15b9aa554bc Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Sat, 24 Apr 2021 17:08:10 -0700 Subject: [PATCH] Treat ${arr[*]} like $* for SC2048 --- CHANGELOG.md | 1 + src/ShellCheck/Analytics.hs | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index af4b5a0..e0295e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Fixed ### Changed +- SC2048: Warning about $\* now also applies to ${array[\*]} ## v0.7.2 - 2021-04-19 diff --git a/src/ShellCheck/Analytics.hs b/src/ShellCheck/Analytics.hs index b943cbc..97c0b27 100644 --- a/src/ShellCheck/Analytics.hs +++ b/src/ShellCheck/Analytics.hs @@ -820,10 +820,17 @@ checkShorthandIf _ _ = return () prop_checkDollarStar = verify checkDollarStar "for f in $*; do ..; done" prop_checkDollarStar2 = verifyNot checkDollarStar "a=$*" 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[*]%%.*}" checkDollarStar p t@(T_NormalWord _ [T_DollarBraced id _ l]) - | concat (oversimplify l) == "*" && - not (isStrictlyQuoteFree (parentMap p) t) = + | 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)) $ + warn id 2048 "Use \"${array[@]}\" (with quotes) to prevent whitespace problems." + checkDollarStar _ _ = return ()