Warn about 'read' without a variable in POSIX sh

Dash throws an error if the read command isn't supplied a variable name.
This commit is contained in:
ArenM 2022-11-17 18:06:10 -05:00
parent 0786b2bf3c
commit 3342902d9a
1 changed files with 11 additions and 0 deletions

View File

@ -184,6 +184,10 @@ prop_checkBashisms96 = verifyNot checkBashisms "#!/bin/dash\necho $_"
prop_checkBashisms97 = verify checkBashisms "#!/bin/sh\necho ${var,}"
prop_checkBashisms98 = verify checkBashisms "#!/bin/sh\necho ${var^^}"
prop_checkBashisms99 = verify checkBashisms "#!/bin/dash\necho [^f]oo"
prop_checkBashisms100 = verify checkBashisms "read -r"
prop_checkBashisms101 = verify checkBashisms "read"
prop_checkBashisms102 = verifyNot checkBashisms "read -r foo"
prop_checkBashisms103 = verifyNot checkBashisms "read foo"
checkBashisms = ForShell [Sh, Dash] $ \t -> do
params <- ask
kludge params t
@ -284,6 +288,13 @@ checkBashisms = ForShell [Sh, Dash] $ \t -> do
argString = concat $ oversimplify arg
flagRegex = mkRegex "^-[eEsn]+$"
bashism t@(T_SimpleCommand _ _ (cmd:args))
| t `isCommand` "read" && length (onlyNames args) == 0 =
warnMsg (getId cmd) 3061 "read without a variable is"
where
notFlag arg = head (concat $ oversimplify arg) /= '-'
onlyNames = filter (notFlag)
bashism t@(T_SimpleCommand _ _ (cmd:arg:_))
| getLiteralString cmd == Just "exec" && "-" `isPrefixOf` concat (oversimplify arg) =
warnMsg (getId arg) 3038 "exec flags are"