Bu iki komut dizisi arasındaki anahtar fark, ikincisinin echo $b
kabuk sözcük bölme işlemini gerçekleştiren içeriyor olmasıdır . İkinci komut sırasının birincisiyle aynı şekilde çalışmasını sağlamak için, değiştirin:
echo $b | grep "*)>nS4XkrlH @XUL"
ile:
echo "$b" | grep "*)>nS4XkrlH @XUL"
Kelime bölme
Bu iki echo
ifadede boşlukların nasıl işlendiğini gözlemleyin :
$ b="a b c"
$ echo "$b"
a b c
$ echo $b
a b c
Çift tırnak işaretleri olmadan, kabuk argümanlar üzerinde sözcük ayırma gerçekleştirir echo
. Bu, tüm ardışık boşlukların tek bir alana yoğunlaştırıldığı anlamına gelir. Çift tırnak ile, kelime bölme bastırılır ve boşluk korunur.
Sözcük Bölme ve grep
Birden Çok Boşluklu Bir Desen
Sizin grep
desen iki ardışık boşluklar içeriyor. Argüman echo
çift tırnak içine alınmazsa, çıktısı echo
bu iki boşluğa sahip olmaz ve eşleşme bulunmaz. Gözlemek:
$ b="*)>nS4XkrlH @XUL"
$ echo $b | grep "*)>nS4XkrlH @XUL"
$ echo "$b" | grep "*)>nS4XkrlH @XUL"
*)>nS4XkrlH @XUL
İlki grep
hiçbir şeyle eşleşmiyor, ikincisi eşleşmiyor. Aradaki fark kabuğun kelime bölüşmesidir.