Bunun !
komut satırı geçmişi bağlamında komut satırı üzerinde özel bir önemi olduğunu anlıyorum , ancak bunun dışında, bir çalışan komut dosyasında ünlem işareti bazen bir ayrıştırma hatasına neden olabilir.
Bence bunun bir ilgisi var event
, ama bir olayın ne olduğu ya da ne yaptığı hakkında hiçbir fikrim yok. Yine de, aynı komut farklı durumlarda farklı davranabilir.
Aşağıdaki son örnek bir hataya neden olur; ama neden, aynı kod komut değiştirme dışında çalıştığında? .. GNU bash kullanarak 4.1.5
# This works, with or without a space between ! and p
{ echo -e "foo\nbar" | sed -nre '/foo/! p'
echo -e "foo\nbar" | sed -nre '/foo/!p'; }
# bar
# bar
# This works, works when there is a space between ! and p
var="$(echo -e "foo\nbar" | sed -nre '/foo/! p')"; echo "$var"
# bar
# This causes an ERROR, with NO space between ! and p
var="$(echo -e "foo\nbar" | sed -nre '/foo/!p')"; echo "$var"
# bash: !p': event not found
protected
daha uygun olurdu. ('tek tırnak' tarafından korunmaktadır)
var=$(…)
(çift tırnak yok) kullanabilirsiniz ve beklediğiniz gibi çalışacaktır (sanırım). Bu hala “güvenlidir” çünkü basit bir ödevin değer kısmı sözcük bölme veya globbing'e tabi değildir (ancak bu, tüm kabuklar altında yerleşikler (örn export
. local
, Vb.) Aracılığıyla yapılan ödevler için doğru olmayabilir ). Ne yazık ki, bu basit ödevlerin ötesine geçmez, çünkü çift tırnaklar, diğer bağlamlarda diğer genişleme türlerini alırken, kelime bölünmesine ve globbing'e karşı korunmanın bir yoludur.