Как создать файл с именем, начинающимся с символа «-»

Как создать файл с именем, начинающимся с символа «-»

Я хочу использовать touchкоманду в терминале Linux, чтобы создать файл с именем, начинающимся с символа -, скажем -attempt, .

Как мне преодолеть тот факт, что -это особенный персонаж?

Например, если бы я хотел создать файл с именем #attempt, я бы не мог просто написатьtouch #attempt

Вместо этого мне пришлось бы написать touch \#attempt, но в этом -случае даже если я \его использую, он все равно не работает должным образом).

решение1

Два пути:

Переместите -от первого символа

touch ./-foo

Или используйте --маркер конца переключателей

touch -- -foo

решение2

touch \#attemptработает, потому что знак решетки является специальным для оболочки. Аналогично, вам понадобится что-то вроде touch \(foo\), или touch 'this & that'для имен файлов с круглыми скобками или амперсандом и т. д.

Но выход из тире не поможет, так как он не является чем-то особенным.к оболочке, а к утилите, запущенной оболочкой. Запуск командной строки оболочки touch \-foo— это то же самое, что и запуск touch -foo, в любом случае touchполучит единственный аргумент -foo.

Поэтому вместо побега требуется что-то другое.

Стандартный способ указать программе прекратить интерпретировать аргументы команды как (возможные) опции — вставить аргумент --после опций. Например, это будет работать rmс опцией -f, для файла с именем -r:

rm -f -- -r

rm -- --удалит файл с именем --.)

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

rm ./-rf

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