Я создал каталог с именем "$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-запросов в веб-приложениях, чтобы предотвратить выполнение команд базы данных, отличных от тех, которые предназначены.