*
Joker karakterin açıklaması şunları söylediğinden , başlangıçta şaşırtıcı joker davranış budur :
Boş dize de dahil olmak üzere herhangi bir dizeyle eşleşir.
... dosya adının ilk karakteri olduğunda bu dönemin biraz özel olduğunu anlayana kadar . Giriş metni şunu 3.5.8 Filename Expansion
söylüyor:
Dosya adı genişletmesi için bir desen kullanıldığında, '.' Karakteri. bir dosya adının başlangıcında veya bir eğik çizgiyi hemen izleyen kabuk seçeneği dotglob ayarlanmadığı sürece açıkça eşleştirilmelidir.
İle joker prefixing "kullanım deseni" ./
için yararlıdır Bash kabuğunda çizgi gelen isimleri Taşıma steeldriver tavsiye edildiği gibi,. Joker karakter / dosya adı genişletmesi üzerinde bir etkisi yoktur, ancak söz konusu programların seçenekler olarak yanlış yorumlayabileceği karakterlerle başlıyorlarsa, dosya adlarına başvurduğunuzda daha güvenli / daha kolay hale getirir. Örneğin:
# I want a file named `-n`
$ touch -n
touch: invalid option -- 'n'
Try 'touch --help' for more information.
$ touch -- -n
### ok
$ touch ./-n
### ok
... ve şimdi o var , bir dosya adında -n
bir joker ile bitti döngü olur,:
for file in *n
do
echo "$file"
done
... çıktı almıyorum!
Ancak joker karakterle ön ek yaparsam ./
,
for file in ./*n
do
echo "$file"
done
./-n
... dosya adını görüyorum.
Bu, gösterim amaçlı basit bir örnektir; ayrıca bkz. printf neden yankıdan daha iyi? bu nedenle ve diğerleri. Diğer yardımcı programlar diğer seçeneklerle tetiklenir, bu nedenle dosya adlarını yardımcı programlara mümkün olduğunca güvenli bir şekilde sunmak daha iyidir. Eğer varsa yok dosya "kaçış" joker önüne, başka şekillerde "korumak" için kamu olurdu; tek ortak bir ile seçeneklerin sonunu işaret etmektir --
örneğin:
for file in *n
do
mv -- "$file" backup/"$file"
done
... -n
dosya adını mv
(aşağıda görüldüğü gibi set -x
) güvenli bir şekilde geçirecektir :
mv -- -n backup/-n
./*
ile başlayan adların-
seçenek olarak ele alınmamasını sağlamasıdır .