Какие символы нужно избегать в файлах без кавычек?

У меня есть браузер / оболочка / терминал, который выполняет команды bash, и я избегаю пробелов, но оказывается, что скобки также должны быть экранированы. Какие еще символы должны быть экранированы для имен файлов, которые не указаны в кавычках?

  • переименовать несколько файлов в нескольких каталогах с помощью сценариев Bash
  • zsh compinit: небезопасные каталоги, запустить compaudit для списка
  • Шестнадцатеричная проверка последовательности чисел в Linux?
  • Как копировать и переименовывать файлы, найденные в функции «найти» Linux?
  • Назначение по умолчанию для нулевой переменной с заменой команды
  • Поиск указанных ключевых слов в файлах и копирование в новое имя файла на основе ключевого слова
  • Проблема bc о длинном выражении
  • Защитная оболочка Power Broker или полный сценарий оболочки
  • One Solution collect form web for “Какие символы нужно избегать в файлах без кавычек?”

    Простое решение состоит в том, чтобы поставить одну цитату ( ' ) в начале и другую одиночную цитату в конце и заменить каждый символ внутри имени файла на 4-символьную последовательность '\'' . Все символы теряют свое особое значение внутри строки с одним кавычком, кроме ' самого себя», которое отмечает конец строки. Последовательность '\'' заканчивает однокасканный литерал, сразу же следует цитируемая одиночная кавычка и открывает новый однокасканный литерал. Таким образом, имя файла

     This file's name has some weird characters! Will you manage to escape them? 

    могут быть указаны следующим образом:

     somecommand 'This file'\''s name has some weird characters! Will you manage to escape them?' 

    Двойные кавычки имеют более сложные правила экранирования и не позволяют включать восклицательный знак ! если замена истории активирована, поэтому я не буду рассматривать их дальше.

    Альтернативный подход – защита персонажей с помощью обратных косых черт. Это работает для каждого символа, кроме строк новой строки; для новой строки единственное решение заключается в том, чтобы помещать его в одинарные кавычки (или двойные кавычки). Если вы хотите свести к минимуму количество обратных косых черт, чтобы представить указанное имя пользователю, вы можете ограничить его местами, где требуется обратная косая черта; однако, чем больше обратных косых черт вы опускаете, тем больше вы рискуете забыть тот, который необходим. Буквы, цифры и символы, отличные от ASCII, всегда ok¹. Цитата whitespace и пунктуация всякий раз, когда вы не уверены.

    С типичной оболочкой (ksh, bash или zsh) вам нужно указать следующие символы, по крайней мере, в некоторых случаях.

    • Пробелы (пробел, вкладка, новая строка – запоминание того, что символы новой строки не могут быть процитированы с обратной косой чертой).
    • ! – расширение истории.
    • " – синтаксис оболочки.
    • # – запуск комментария, когда ему предшествуют пробелы; zsh подстановочные знаки.
    • Синтаксис $ – оболочки.
    • & – синтаксис оболочки.
    • ' – синтаксис оболочки.
    • ( – даже в середине слова: расширенные шары ksh (также доступны в bash и zsh), zsh -символы.
    • ) (см. ( )
    • * – sh wildcard.
    • , – только внутри расширения скобы.
    • ; – синтаксис оболочки.
    • < – синтаксис оболочки.
    • = – в zsh, когда он находится в начале имени файла (расширение имени файла с помощью поиска PATH).
    • > – синтаксис оболочки.
    • ? – Шрифт.
    • [ – sh wildcard.
    • \ – синтаксис оболочки.
    • ] – вы можете уйти, оставив его без кавычек.
    • ^ – расширение истории; zsh.
    • ` – синтаксис оболочки.
    • { – расширение брекета.
    • | – синтаксис оболочки.
    • } – требуется экранирование в zsh, другие оболочки более снисходительны, если нет подходящей открытой скобки.
    • ~ – расширение домашней директории, когда оно находится в начале имени файла; zsh wildcard; всегда безопасно, когда это последний символ.

    Иногда нескольким персонажам может потребоваться специальная обработка:

    • - не является специальным для оболочки, но когда он находится в начале аргумента команды, он указывает параметр. Он не может быть защищен кавычками, поскольку специальная обработка находится в команде, а не в оболочке. Чтобы защитить имя файла, которое начинается с - , вы можете поставить ./ перед ним – таким образом, это все тот же файл, но аргумент не начинается с - больше.
    • . не является самоцелью, но точечные файлы по умолчанию исключаются из * globs.
    • : не является специальным для оболочки, но некоторые команды анализируют его специально, например, для указания удаленного файла ( hostname:filename ). Обратитесь к документации команды, чтобы узнать, как справиться с файловыми именами, содержащими двоеточия.

    ¹ Если пользователь не настроил альтернативные символы расширения истории. Некоторые оболочки позволяют это. Это еще одна причина использовать одинарные кавычки, а не обратную косую черту.

    Interesting Posts

    Загрузка каталога в HTTP

    Как изменить цвет загрузочных журналов в Debian?

    Переупаковка пакета Debian

    Когда строки файла или каталога становятся слишком длинными, перейдите в формат списка ls?

    Найдите значение в одном столбце и напечатайте соответствующее значение от другого

    Как предотвратить изменение конкретного экземпляра xterm из изменений заголовка?

    Правильное определение использования памяти в Linux

    Запуск команд в удаленном Linux

    Как скрывать данные входа, переданные командам командной строки из списка процессов?

    Правильно ли использовать определенные специальные символы при именах имен файлов в Linux?

    vim spell checker?

    как записать живое изображение аварийного диска (ISO) с dd для загрузки UEFI?

    Действие ядра Linux при выходе из процесса init

    Cant Удалить 2 раздела (Fat32 и ext3) на USB-накопителе Toshiba 16G

    Изменить домашний каталог для пользователя LDAP в Linux

    Linux и Unix - лучшая ОС в мире.