Подводные камни в Bash №4
Представь что у тебя есть переменная
И в скрипте мы делаем так:
Это ошибочный вариант, бэд мать его практика.
Команда cd $(dirname "$f") должна вернуть путь к папке, где лежит файл.
НО! Результат этой команды разбивается на части, если в нём есть пробелы.
Например:
Выдаст: My Documents
А если так:
Логично, получаем ошибку: cd: No such file or directory: My
Bash думает что это два отдельных слова, а не один путь.
Бест-практика
- Кавычки защищают результат команды от разбиения.
- И
cdполучит целый путь, даже если в нём есть пробелы.
Как работают кавычки
-
Когда Bash видит
$(...), он воспринимает это как отдельную область, некий «уровень». -
Кавычки внутри
$(...)работают только внутри. -
Кавычки снаружи не объединяются с внутренними.
Наглядно, можно представить так:
Внутренние кавычки "$f" защищают переменную f
Внешние кавычки "" защищают результат dirname "$f"
Теперь даже если переменная будет содержать пробелы команда не разобьётся на части.