Шпаргалка: передавать пути с пробелами и дефисами
Сохраните имя пути одним аргументом, отделите параметры от данных и проверьте, как Bash видит значение. Подходит для ручной работы с необычными именами.
Когда открыть эту шпаргалку
Пробел в имени не является разделителем файловой системы. Разделение на аргументы выполняет оболочка до запуска утилиты. Вторая независимая проблема возникает у имени, начинающегося с дефиса: программа может принять его за опцию.
Выбор команды
Применяйте защиту на нужном уровне: кавычки управляют разбором Bash, а -- поддерживается конкретной утилитой.
| Что выяснить | Команда или выражение | Как читать результат |
|---|---|---|
| Пробелы в буквальном имени | ls -ld -- './shift notes' | Один путь; кавычки не входят в его значение. |
| Значение переменной | ls -ld -- "$target" | Двойные кавычки сохраняют аргумент без word splitting и globbing. |
| Имя с дефисом | ls -ld -- './-draft' | Префикс ./ дополнительно отделяет путь от формы опции. |
| Показать экранированное значение | printf '%q\n' "$target" | Bash-форма для диагностики; не универсальный формат обмена. |
| Несколько готовых аргументов | printf '<%s>\n' "$@" | Каждая позиция остаётся отдельным аргументом. |
Короткая последовательность
Переменная хранит учебное имя каталога. Команда printf показывает строку и её диагностическое представление; создавать каталог для этого не требуется.
target="./shift notes"
printf 'Имя: <%s>\nBash: %q\n' "$target" "$target"Проверка вывода
Если вместо одного имени программа получает несколько слов, изучите именно исходную командную строку. Кавычки вокруг переменной должны присутствовать в месте её использования; сохранённые внутри значения символы кавычек не становятся синтаксисом оболочки.
Границы применения
Не все программы понимают --. Для find, например, безопасный начальный путь удобнее задавать через ./ или абсолютное имя. Не превращайте диагностическую строку в команду через eval: исходные значения должны оставаться данными.
Технические источники
Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.
- Руководство bash(1)
- Руководство ls(1)
- Руководство find(1)
Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.
Примеры для собственной Linux-системы с Bash и указанными утилитами. Наличие пакетов и набор опций проверьте в установленной версии; браузерный терминал поддерживает только своё подмножество.
От материала к практике
Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.