Поиск…
Пробелы при назначении переменных
Пробелы имеют значение при назначении переменных.
foo = 'bar' # incorrect foo= 'bar' # incorrect foo='bar' # correct
Первые два будут приводить к синтаксическим ошибкам (или, что еще хуже, выполнению неправильной команды). Последний пример корректно установит переменную $foo
в текст «bar».
Отсутствует последняя строка в файле
В стандарте C говорится, что файлы должны заканчиваться новой строкой, поэтому, если EOF находится в конце строки, эта строка не может быть пропущена некоторыми командами. В качестве примера:
$ echo 'one\ntwo\nthree\c' > file.txt $ cat file.txt one two three $ while read line ; do echo "line $line" ; done < file.txt one two
Чтобы убедиться, что это правильно работает в приведенном выше примере, добавьте тест, чтобы он продолжал цикл, если последняя строка не пуста.
$ while read line || [ -n "$line" ] ; do echo "line $line" ; done < file.txt one two three
Неудачные команды не останавливают выполнение сценария
В большинстве языков сценариев, если вызов функции завершается неудачно, он может вызывать исключение и останавливать выполнение программы. Команды Bash не имеют исключений, но у них есть коды выхода. Однако отказ от ненужных сигналов кода выхода, однако, отличный от нуля код выхода не остановит выполнение программы.
Это может привести к опасным (хотя, предположительно, надуманным) ситуациям:
#!/bin/bash
cd ~/non/existent/directory
rm -rf *
Если cd
-ing в этом каталоге не удастся, Bash проигнорирует сбой и перейдет к следующей команде, очистив каталог, из которого вы запускали скрипт.
Лучшим способом решения этой проблемы является использование команды set :
#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *
set -e
сообщает Bash немедленно выйти из сценария, если какая-либо команда возвращает ненулевой статус.