Basit çözüm, '
başına tek bir tırnak '
işareti ( ) ve sonuna da tek bir tırnak işareti koymak ve dosya adındaki her karakteri 4 karakterlik sıra ile değiştirmektir '\''
. Dizenin '
sonunu işaretleyen kendisi hariç, tüm karakterler tek tırnaklı bir dize içindeki özel anlamlarını kaybeder . Sekans '\''
, tek tırnaklı bir değişmezi bitirir, hemen ardından tırnak içinde bir tek tırnak işareti verir ve yeni bir tek tırnaklı değişmezi açar. Böylece dosya adı
This file's name has some weird characters!
Will you manage to escape them?
aşağıdaki gibi alıntılanabilir:
somecommand 'This file'\''s name has some weird characters!
Will you manage to escape them?'
Çift tırnak işaretleri daha karmaşık kaçış kurallarına sahiptir ve !
geçmiş ikamesi etkinleştirilirse bir ünlem işareti eklemenize izin vermez , bu yüzden bunları daha fazla düşünmeyeceğim.
Alternatif bir yaklaşım, karakterleri ters eğik çizgilerle korumaktır. Bu, yeni satırlar hariç her karakter için geçerlidir; yeni satır için, tek tırnak (veya çift tırnak) içine koymak tek çözümdür. Alıntılanan adı kullanıcıya sunmak için ters eğik çizgi sayısını en aza indirmek istiyorsanız, ters eğik çizginin gerekli olduğu yerlerle sınırlandırabilirsiniz; ancak, ne kadar çok ters eğik çizgi atlarsanız, gerekli olanı unutma riskiniz o kadar artar. Harfler, rakamlar ve ASCII olmayan karakterler her zaman iyidir¹. Emin olmadığınız zaman boşluk ve noktalama işareti verin.
Tipik bir kabukla (ksh, bash veya zsh), en azından bazı durumlarda aşağıdaki karakterleri alıntılamanız gerekir.
- Boşluk (boşluk, sekme, yeni satır - yeni satırların ters eğik çizgi ile tırnak içine alınamayacağını unutmayın).
!
- tarihin genişlemesi.
"
- kabuk sözdizimi.
#
- boşluktan önce yorum başlangıcı; zsh joker karakterleri.
$
- kabuk sözdizimi.
&
- kabuk sözdizimi.
'
- kabuk sözdizimi.
(
- bir kelimenin ortasında bile: ksh genişletilmiş globlar (bash ve zsh'da da mevcuttur); zsh joker karakterleri.
)
(bakınız (
)
*
- sh joker karakter.
,
- sadece iç destek genişlemesi.
;
- kabuk sözdizimi.
<
- kabuk sözdizimi.
=
- zsh içinde, bir dosya adının başlangıcında (PATH aramasıyla dosya adı genişletmesi).
>
- kabuk sözdizimi.
?
- sh joker karakter.
[
- sh joker karakter.
\
- kabuk sözdizimi.
]
- alıntı yapmadan bırakabilirsiniz.
^
- tarihin genişletilmesi; zsh joker karakteri.
`
- kabuk sözdizimi.
{
- destek genişlemesi.
|
- kabuk sözdizimi.
}
- zsh içinde kaçması gerekiyor, eşleşen kabuklar olmadığında diğer mermiler daha yumuşak.
~
- bir dosya adının başlangıcında ana dizin genişletme; zsh joker karakteri; son karakter olduğunda her zaman güvende.
Birkaç karakter daha bazen özel işlem gerektirebilir:
-
kabuk için özel değildir, ancak bir komut bağımsız değişkeninin başlangıcında, bir seçeneği belirtir. Özel işleme kabukta değil komutta olduğundan tırnaklarla korunamaz. İle başlayan bir dosya adını korumak için -
, ./
önüne koyabilirsiniz - bu şekilde hala aynı dosyadır, ancak argüman -
artık başlamaz .
.
kendi başına özel değildir, ancak nokta dosyaları *
varsayılan olarak globların dışında tutulur .
:
kabuk için özel değildir, ancak bazı komutlar özel olarak ayrıştırır, örneğin uzak bir dosyayı belirtmek için ( hostname:filename
). İki nokta üst üste içeren dosya adlarıyla nasıl başa çıkılacağını görmek için komutun belgelerine bakın.
Altern Kullanıcı alternatif geçmiş genişletme karakterleri yapılandırmamışsa. Bazı mermiler buna izin verir. Ters eğik çizgiler yerine tek tırnak kullanmanın başka bir nedeni de budur.