From d037b9fc7e4f4f25eff1df3acd6c123a85ed7686 Mon Sep 17 00:00:00 2001 From: Eisuke Kawashima Date: Tue, 25 Mar 2025 01:31:06 +0900 Subject: [PATCH] fix(SC3013): check POSIX-compliant unary operators for test and [ fix #2125 --- src/ShellCheck/Checks/ShellSupport.hs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/ShellCheck/Checks/ShellSupport.hs b/src/ShellCheck/Checks/ShellSupport.hs index f228832..b639e4f 100644 --- a/src/ShellCheck/Checks/ShellSupport.hs +++ b/src/ShellCheck/Checks/ShellSupport.hs @@ -218,6 +218,9 @@ prop_checkBashisms124 = verify checkBashisms "#!/bin/dash\ntype -p test" prop_checkBashisms125 = verifyNot checkBashisms "#!/bin/busybox sh\ntype -p test" prop_checkBashisms126 = verifyNot checkBashisms "#!/bin/busybox sh\nread -p foo -r bar" prop_checkBashisms127 = verifyNot checkBashisms "#!/bin/busybox sh\necho -ne foo" +prop_checkBashisms128 = verify checkBashisms "#!/bin/sh\n[ -k /tmp ]" +prop_checkBashisms129 = verifyNot checkBashisms "#!/bin/dash\ntest -k /tmp" +prop_checkBashisms130 = verify checkBashisms "#!/bin/sh\n[ -o errexit ]" checkBashisms = ForShell [Sh, Dash, BusyboxSh] $ \t -> do params <- ask kludge params t @@ -252,6 +255,18 @@ checkBashisms = ForShell [Sh, Dash, BusyboxSh] $ \t -> do bashism (T_SimpleCommand id _ [asStr -> Just "test", lhs, asStr -> Just op, rhs]) | op `elem` [ "<", ">", "\\<", "\\>", "<=", ">=", "\\<=", "\\>="] = unless isDash $ warnMsg id 3012 $ "lexicographical " ++ op ++ " is" + bashism (TC_Unary id _ op _) + | op `elem` [ "-k", "-G", "-O" ] = + unless isDash $ warnMsg id 3013 $ op ++ " is" + bashism (T_SimpleCommand id _ [asStr -> Just "test", asStr -> Just op, _]) + | op `elem` [ "-k", "-G", "-O" ] = + unless isDash $ warnMsg id 3013 $ op ++ " is" + bashism (TC_Unary id _ op _) + | op `elem` [ "-N", "-o", "-R" ] = + warnMsg id 3013 $ op ++ " is" + bashism (T_SimpleCommand id _ [asStr -> Just "test", asStr -> Just op, _]) + | op `elem` [ "-N", "-o", "-R" ] = + warnMsg id 3013 $ op ++ " is" bashism (TC_Binary id SingleBracket op _ _) | op `elem` [ "-ot", "-nt", "-ef" ] = unless isDash $ warnMsg id 3013 $ op ++ " is"