Anda mungkin tahu bom fork itu :
:(){ :|:&};: #WARNING: harmful code
Saya bertanya-tanya mengapa itu perlu, agar dapat diurai, untuk memasukkan ruang setelah kurung kurawal pembukaan.
Anda mungkin tahu bom fork itu :
:(){ :|:&};: #WARNING: harmful code
Saya bertanya-tanya mengapa itu perlu, agar dapat diurai, untuk memasukkan ruang setelah kurung kurawal pembukaan.
Jawaban:
{}
{ list; }
Menempatkan daftar perintah antara kurung kurawal menyebabkan daftar dieksekusi dalam konteks shell saat ini. Tidak ada subkulit yang dibuat. Tanda titik koma (atau baris baru) diperlukan.
Selain penciptaan subkulit, ada perbedaan halus antara kedua konstruksi ini karena alasan historis. Kawat gigi adalah kata-kata yang dicadangkan, sehingga harus dipisahkan dari daftar dengan karakter meta kosong atau karakter shell lainnya. Tanda kurung adalah operator, dan diakui sebagai token terpisah oleh shell meskipun mereka tidak dipisahkan dari daftar oleh spasi putih.
// sumber
Saya pikir @rush mungkin memberikan jawaban yang benar jika menyesatkan di sini. Garpu-bom mendefinisikan fungsi yang disebut " :
". Kode dalam kurung kurawal tidak dieksekusi sampai fungsi dipanggil oleh " :
" final . Jadi kurung kurawal sebagai pengelompokan perintah dan kurung kurawal sebagai fungsi tubuh secara sintaksis sama tetapi memiliki semantik yang berbeda.
Dari dokumen yang sama dengan @rush mengutip:
Perhatikan bahwa karena alasan historis, dalam penggunaan yang paling umum kurung kurawal yang mengelilingi tubuh fungsi harus dipisahkan dari tubuh dengan kosong atau baris baru. Ini karena kurung kurawal adalah kata yang dilindungi undang-undang dan hanya dikenali seperti itu ketika dipisahkan dari daftar perintah oleh whitespace atau metacharacter shell lainnya. Juga, ketika menggunakan kawat gigi, daftar harus diakhiri dengan tanda titik koma, '&', atau baris baru.
function_body
adalah compound_command
(ditambah opsional redirect_list
). Ruang diperlukan karena {
merupakan kata khusus, bukan karakter khusus.
brace_group
s berperilaku berbeda ketika bagian dari suatu fungsi dan kapan tidak. Saya menggunakan pengelompokan perintah untuk menggambarkan kasus terakhir dan ini adalah apa yang dijelaskan dalam tautan terburu-buru.
{
bukanlah operator tetapi kata yang dilindungi undang-undang, dan kata-kata harus dipisahkan dari kata lain agar dianggap berbeda.