diff --git a/ShellCheck/Analytics.hs b/ShellCheck/Analytics.hs index 9962b4eab15dcbdf764721a749b2992f29a84b4c..9649a90c4dbca82f623cef39145389dccb0679f0 100644 --- a/ShellCheck/Analytics.hs +++ b/ShellCheck/Analytics.hs @@ -264,7 +264,8 @@ checkDivBeforeMult _ = return () prop_checkArithmeticDeref = verify checkArithmeticDeref "echo $((3+$foo))" prop_checkArithmeticDeref2 = verify checkArithmeticDeref "cow=14; (( s+= $cow ))" prop_checkArithmeticDeref3 = verifyNot checkArithmeticDeref "cow=1/40; (( s+= ${cow%%/*} ))" -checkArithmeticDeref (TA_Expansion _ (T_DollarBraced id str)) | not $ any (`elem` "/.:#%") $ str = +prop_checkArithmeticDeref4 = verifyNot checkArithmeticDeref "(( ! $? ))" +checkArithmeticDeref (TA_Expansion _ (T_DollarBraced id str)) | not $ any (`elem` "/.:#%?*@") $ str = warn id $ "Don't use $ on variables in (( )) unless you want to dereference twice" checkArithmeticDeref _ = return () diff --git a/ShellCheck/Parser.hs b/ShellCheck/Parser.hs index b91442bb30440d58fc2e4ee362a74506dc5d8472..64a158f4ef039373e8c213ba1941b885566b4826 100644 --- a/ShellCheck/Parser.hs +++ b/ShellCheck/Parser.hs @@ -279,6 +279,7 @@ prop_a6 = isOk readArithmeticContents " 1 | 2 ||3|4" prop_a7 = isOk readArithmeticContents "3*2**10" prop_a8 = isOk readArithmeticContents "3" prop_a9 = isOk readArithmeticContents "a^!-b" +prop_aA = isOk readArithmeticContents "! $?" readArithmeticContents = readSequence where @@ -359,6 +360,7 @@ readArithmeticContents = readNegated = do id <- getNextId op <- oneOf "!~" + spacing x <- readAnySigned return $ TA_Unary id [op] x