Есть такая славная штука - статический анализатор для bash (вроде и другие тоже поддерживает). На чём он там написан - меня особо волнует, главное он имеет плагин для atom-linter.

shellcheck-atom

Так вот, писать на bash без shellcheck я крайне не рекомендую, потому что все люди - рукожопы, да и я тоже.

Позавчера прошёлся немного с shellcheck по коду своего проекта и был даже в каком-то роде рад - 3-4 основных типа ошибок, ничего серьёзного, видимо опыт сказывается. Основные ошибки, на которые ругался shellcheck:

Использование t / tmp при read для отсечения ненужных слов

Например, было:

read md5 tmp < file.md5

а по кашруту:

read md5 _ < file.md5

Передача параметров массивом без кавычек

Например, было:

main $@

а по кашруту:

main "$@"

либо, если аргументы нужны как одна строка:

main "$*"  # или даже без кавычек сканает, хз

Не совсем явное обнуление переменной при запуске команды

Например:

LANG= join -a 1 -j 1 file1 file2

а по кашруту, типа с лучшей читаемостью и понятностью:

LANG='' join -a 1 -j 1 file1 file2

Незаковыченные паттерны grep которые могут glob’биться.

Например:

ip link | grep br[0-9]*

может по дефолту вести себя так:

touch br01111
touch broken
set -x
$ ip link | grep br[0-9]*
+ ip link
+ grep --color br01111 broken 

а по кашруту надо так:

ip link | grep 'br[0-9]*'

Заключение

Короче, можно говорить, что “я, мол, и так умный”, но все мы криворукие люди с дырявым мозгом и можем что-то да не заметить. Ну и “bash - не язык, какой ему нахер linter” тоже можно говорить, да. А можно не выёбываться и сэкономить себе минут 20 из цикла поиска баги, фикса, отладки, тестов и пересборки/выкладки, если у вас это используется в продакшне просто сразу написав нормально. Думаю, он и поумнее баги находить может, особенно у начинающих в bash.