Как мне избежать имени подкаталога с амперсандом в нем?

9

Запуск kornshell и попытка пройти по дереву каталогов. Хотите перейти в подкаталог с именем:

 -3ab_&_-3dc.img

Мой вопрос: КАК мне нужно бежать от амперсанда в этом имени? Я пробовал разные комбинации двойных кавычек и обратной косой черты без успеха.

RCinICT
источник

Ответы:

11

Для &(или почти любого другого персонажа у вас есть две простые возможности).

  • Поместите одинарные кавычки вокруг всего этого: ' -3ab_&_-3dc.img'
  • Поставьте обратную косую черту перед каждым неприятным персонажем: -3ab_\&_-3dc.img

Есть два исключения:

  • Метод одинарных кавычек не работает для одинарных кавычек. Обратная косая черта не является особой в одинарных кавычках, поэтому вы также не можете использовать ее напрямую. Что вы можете сделать, это завершить строку в одинарных кавычках, немедленно использовать обратную косую черту плюс одинарную кавычку и перезапустить одинарную кавычку. Так, например, если имя директории foo'bar\qux: cd 'foo'\''bar\qux'. Вы можете помнить это так: внутри одинарных кавычек, '\''вы получите одинарную кавычку.
  • Метод обратной косой черты не работает для новых строк: обратный слэш-новая строка просто игнорируется. Вы должны поместить одинарные кавычки вокруг новой строки.

Вы также можете использовать двойные кавычки, но затем вам нужно поставить обратную косую черту перед некоторыми символами. Одиночные кавычки более просты.

Здесь есть дополнительная сложность, которая заключается в том, что имя каталога начинается с тире. Этот символ сообщает cdкоманде (как почти каждая команда), что опция следует. Тире не является особенным для оболочки, только для команды, поэтому кавычки на нее не влияют. У вас есть два способа передачи аргумента, начинающегося с тире, в команду без интерпретации его как опции:

  • Найдите другой способ выразить этот аргумент. Для имени файла добавление ./перед все еще обозначает тот же файл.
  • Поставь аргумент --раньше. Это говорит команде прекратить поиск вариантов.

Итак, вот несколько способов, которыми вы можете перейти в этот подкаталог:

cd -- '-3ab_&_-3dc.img'
cd -- -3ab_\&_-3dc.img
cd ./-3ab_\&_-3dc.img
cd './-3ab_&_-3dc.img'
Жиль "ТАК - перестань быть злым"
источник
Спасибо. Думаю, я тоже пробовал этот формат, но я забыл убежать от амперсанда (как в вашем третьем примере). Когда я это сделал, это сработало.
RCinICT
5

Амперсанду нужно экранировать, но проблема, скорее всего, в том, что вы сталкиваетесь с лидером -, а не с амперсандом. Ведущий -заставил CD подумать, что вы передаете варианты. Вы можете обойти это, используя ./:

cd './-3ab_&_-3dc.img'
jordanm
источник
Это &определенно проблема. Что касается -, это зависит от оболочки. Zsh очень доволен cdкаталогом, начинающимся с -. Однако Баш не является.
Патрик
Спасибо. Думаю, я тоже попробовал этот формат, но я забыл убежать от амперсанда. Когда я это сделал, это сработало.
RCinICT