Как удалить папку, которая начинается с «$»?

Как удалить папку, которая начинается с «$»?

Я создал каталог с именем "$pattern", и теперь, когда я пытаюсь удалить его, появляется сообщение

шаблон: Неопределенная переменная.

Я пытался:

$ rm -r $pattern
$ rm -rf $pattern
$ rm "$ option[value='2016']"

решение1

$, пробел 'и [являются специальными символами в большинстве оболочек. Чтобы удалить их особое значение, вам придется использовать механизмы кавычек оболочки.

TheСинтаксис цитирования сильно различается в зависимости от оболочки.

Во всех известных мне оболочках можно использовать одинарные кавычки для заключения в кавычки всех символов, кроме одинарных кавычек, обратной косой черты и символа новой строки (в оболочках типа Bourne последние два символа также заключаются в кавычки, за исключением \некоторых обратных кавычек).

rm -r '$pattern'

Должно работать в большинстве распространенных оболочек.

rm -r \$pattern

Будет работать (за исключением внутренних обратных кавычек для кавычек типа Bourne) во всех оболочках, кроме семейства rc.

То же самое для:

rm "\$option[value='2016']"

В rcоболочках типа - вы бы использовали:

rm '$option[value=''2016'']'

решение2

Если каталог пуст:

rmdir \$pattern

В противном случае:

rm -r \$pattern

(Он рекурсивно удалит все файлы, содержащиеся в папке)

решение3

Если вам нужно работать с файлом, содержащим специальные символы, можно воспользоваться функцией автозаполнения bash: начните вводить команду (в данном случае rmdir), а затем нажмите Tabнесколько раз. Это позволит обойти все файлы/каталоги в текущем каталоге, автоматически экранируя все специальные символы.

Это также хорошо работает, если вы работаете с очень длинными именами файлов.

решение4

Вы просто экранируете символ с помощью «\», это также распространенная практика, используемая при написании SQL-запросов в веб-приложениях, чтобы предотвратить выполнение команд базы данных, отличных от тех, которые предназначены.

Связанный контент