Muhtemelen o çatal bombayı biliyorsunuz :
:(){ :|:&};: #WARNING: harmful code
Açılış kıvırcık ayraçtan sonra bir boşluk eklemenin neden ayrıştırılması gerektiğini merak ediyorum.
Muhtemelen o çatal bombayı biliyorsunuz :
:(){ :|:&};: #WARNING: harmful code
Açılış kıvırcık ayraçtan sonra bir boşluk eklemenin neden ayrıştırılması gerektiğini merak ediyorum.
Yanıtlar:
{}
{ list; }Kıvrık kaşlı ayraçlar arasına bir komut listesi yerleştirmek listenin geçerli kabuk bağlamında yürütülmesine neden olur. Alt kabuk oluşturulmaz. Aşağıdaki noktalı virgül (veya yeni satır) gerekir.
Bir alt kabuğun yaratılmasına ek olarak, bu iki yapı arasında tarihsel nedenlerden dolayı ince bir fark vardır. Diş telleri ayrılmış kelimelerdir, bu nedenle listeden boşluklar veya diğer kabuk metakarakterleri ile ayrılmalıdır. Parantezler işleçlerdir ve boşlukla listeden ayrılmasalar bile kabuk tarafından ayrı simgeler olarak tanınırlar.
// kaynak
Bence @rush burada yanıltıcı bir cevap veriyorsa doğru olabilir. Çatal bomba, " " adlı bir işlevi tanımlar :. Kıvrık ayraçlardaki kod, işlev son " :" tarafından çağrılıncaya kadar yürütülmez . Yani komut grubu olarak kıvırcık parantez ve fonksiyon gövdesi olarak kıvırcık parantez sözdizimsel olarak aynıdır ancak farklı semantiğe sahiptir. @Rush cites ile
aynı belgeden :
Tarihsel nedenlerden dolayı, en yaygın kullanımda, işlevin gövdesini çevreleyen kıvırcık parantezlerin boşluklardan veya satırsonlarından vücuttan ayrılması gerektiğini unutmayın. Bunun nedeni, parantezlerin ayrılmış sözcükler olması ve yalnızca komut listesinden boşluk veya başka bir kabuk metakarakteriyle ayrıldıklarında tanınmalarıdır. Ayrıca, kaşlı ayraçları kullanırken, liste noktalı virgül, '&' veya yeni satır ile sonlandırılmalıdır.
function_bodybir compound_command(artı isteğe bağlı redirect_list). Boşluk gereklidir, çünkü {özel bir karakter değil, ayrılmış bir kelimedir.
brace_groupbir fonksiyonun parçası olduğunda ve olmadığında farklı davranırlar. İkinci durumu tanımlamak için komut gruplaması kullanıyordum ve acele bağlantısında açıklanan şey buydu.
{bir operatör değil, ayrılmış bir sözcüktür ve kelimelerin farklı kabul edilebilmesi için diğer kelimelerden ayrılması gerekir.