Просте рішення полягає в тому, щоб покласти одну цитату ( '
) на початку, а іншу - в кінці, і замінити кожен '
символ всередині імені на 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, завжди добре. Процитуйте пробіл та розділові знаки, коли не впевнені.
З типовою оболонкою (ksh, bash або zsh) вам потрібно цитувати наступних символів хоча б за деяких обставин.
- Пробіл (пробіл, вкладка, новий рядок - пам’ятаючи, що нові рядки не можна котирувати з зворотним нахилом).
!
- розширення історії.
"
- синтаксис оболонки
#
- початок коментарів, коли передує пробіл; zsh wildcards.
$
- синтаксис оболонки
&
- синтаксис оболонки
'
- синтаксис оболонки
(
- навіть в середині слова: ksh розширені глобуси (також доступні в bash і zsh); zsh wildcards.
)
(див. (
)
*
- sh wildcard.
,
- тільки всередині розширення дужки.
;
- синтаксис оболонки
<
- синтаксис оболонки
=
- в zsh, коли він знаходиться на початку імені файлу (розширення імені файлу при пошуку PATH).
>
- синтаксис оболонки
?
- sh wildcard.
[
- sh wildcard.
\
- синтаксис оболонки
]
- ви можете піти, залишивши це без котирування.
^
- розширення історії; zsh wildcard.
`
- синтаксис оболонки
{
- розширення дужки.
|
- синтаксис оболонки
}
- потрібно уникнути в zsh, інші снаряди більш м'які, коли немає відповідного відкриття дужки.
~
- розширення домашнього каталогу, коли воно знаходиться на початку імені файлу; zsh wildcard; завжди в безпеці, коли це останній персонаж.
Ще кілька символів можуть вимагати спеціального поводження:
-
не особливий для оболонки, але коли він знаходиться на початку аргументу команди, він вказує варіант. Він не може бути захищений лапками, оскільки спеціальна обробка знаходиться в команді, а не в оболонці. Щоб захистити ім'я файлу, що починається з -
, ви можете поставити ./
перед ним - таким чином, це все одно той самий файл, але аргумент не починається з того, що починається -
.
.
Сам по собі не особливий, але крапки файлів *
за замовчуванням виключаються з глобусів.
:
не спеціально для оболонки, але деякі команди спеціально розбирають її, наприклад, щоб вказати на віддалений файл ( hostname:filename
). Зверніться до документації команди, щоб побачити, як впоратися з файлами нами, що містять двокрапки.
¹ Якщо користувач не налаштував альтернативні символи розширення історії. Деякі снаряди це дозволяють. Це ще одна причина використання одиничних лапок, а не зворотних косих ринків.