Add lint for [ instead of [[ in shells scripts

This commit is contained in:
Aneesh Agrawal 2016-08-05 09:42:04 -04:00
parent 9231ca1c69
commit f07d8f188a
5 changed files with 17 additions and 8 deletions

View file

@ -347,6 +347,9 @@ def check_shell(file_name, lines):
if "`" in stripped:
yield (idx + 1, "script should not use backticks for command substitution")
if " [ " in stripped or stripped.startswith("[ "):
yield (idx + 1, "script should use `[[` instead of `[` for conditional testing")
for dollar in re.finditer('\$', stripped):
next_idx = dollar.end()
if next_idx < len(stripped):

View file

@ -8,3 +8,7 @@ set -o nounset
echo "hello world"
some_var=`echo "command substitution"`
another_var="$some_var"
if [ -z "${some_var}" ]; then
echo "should have used [["
fi
[ -z "${another_var}" ]

View file

@ -54,6 +54,8 @@ class CheckTidiness(unittest.TestCase):
self.assertEqual('script is missing options "set -o errexit", "set -o pipefail"', errors.next()[2])
self.assertEqual('script should not use backticks for command substitution', errors.next()[2])
self.assertEqual('variable substitutions should use the full \"${VAR}\" form', errors.next()[2])
self.assertEqual('script should use `[[` instead of `[` for conditional testing', errors.next()[2])
self.assertEqual('script should use `[[` instead of `[` for conditional testing', errors.next()[2])
self.assertNoMoreErrors(errors)
def test_rust(self):