From efffc6150b1895ef08915f532d2d0cbdd4679dff Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Sun, 27 May 2018 12:53:01 -0700 Subject: [PATCH] Warn about string operations on $@/$* (fixes #1236) --- src/ShellCheck/Checks/ShellSupport.hs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ShellCheck/Checks/ShellSupport.hs b/src/ShellCheck/Checks/ShellSupport.hs index cfe2ded..34133e0 100644 --- a/src/ShellCheck/Checks/ShellSupport.hs +++ b/src/ShellCheck/Checks/ShellSupport.hs @@ -134,6 +134,8 @@ prop_checkBashisms51= verifyNot checkBashisms "#!/bin/sh\ncmd 2>&1" prop_checkBashisms52= verifyNot checkBashisms "#!/bin/sh\ncmd >&2" prop_checkBashisms53= verifyNot checkBashisms "#!/bin/sh\nprintf -- -f\n" prop_checkBashisms54= verify checkBashisms "#!/bin/sh\nfoo+=bar" +prop_checkBashisms55= verify checkBashisms "#!/bin/sh\necho ${@%foo}" +prop_checkBashisms56= verifyNot checkBashisms "#!/bin/sh\necho ${##}" checkBashisms = ForShell [Sh, Dash] $ \t -> do params <- ask kludge params t @@ -295,8 +297,9 @@ checkBashisms = ForShell [Sh, Dash] $ \t -> do (re $ "^[" ++ varChars ++ "]+\\[.*\\]$", "array references are"), (re $ "^![" ++ varChars ++ "]+\\[[*@]]$", "array key expansion is"), (re $ "^![" ++ varChars ++ "]+[*@]$", "name matching prefixes are"), - (re $ "^[" ++ varChars ++ "]+:[^-=?+]", "string indexing is"), - (re $ "^[" ++ varChars ++ "]+(\\[.*\\])?/", "string replacement is") + (re $ "^[" ++ varChars ++ "*@]+:[^-=?+]", "string indexing is"), + (re $ "^([*@][%#]|#[@*])", "string operations on $@/$* are"), + (re $ "^[" ++ varChars ++ "*@]+(\\[.*\\])?/", "string replacement is") ] bashVars = [ "LINENO", "OSTYPE", "MACHTYPE", "HOSTTYPE", "HOSTNAME",