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