Поиск…


Пробелы при назначении переменных

Пробелы имеют значение при назначении переменных.

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 немедленно выйти из сценария, если какая-либо команда возвращает ненулевой статус.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow