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