Bạn có thể biết về quả bom ngã ba đó :
:(){ :|:&};: #WARNING: harmful code
Tôi tự hỏi tại sao nó là cần thiết, để nó phân tích, để bao gồm một khoảng trống sau khi mở ngoặc nhọn.
Bạn có thể biết về quả bom ngã ba đó :
:(){ :|:&};: #WARNING: harmful code
Tôi tự hỏi tại sao nó là cần thiết, để nó phân tích, để bao gồm một khoảng trống sau khi mở ngoặc nhọn.
Câu trả lời:
{}
{ list; }
Đặt một danh sách các lệnh giữa các dấu ngoặc nhọn làm cho danh sách được thực thi trong bối cảnh shell hiện tại. Không có subshell được tạo ra. Danh sách dấu chấm phẩy (hoặc dòng mới) là bắt buộc.
Ngoài việc tạo ra một subshell, có một sự khác biệt tinh tế giữa hai cấu trúc này vì lý do lịch sử. Các dấu ngoặc nhọn là các từ dành riêng, vì vậy chúng phải được phân tách khỏi danh sách bằng khoảng trắng hoặc các ký tự đại diện hệ vỏ khác. Các dấu ngoặc đơn là các toán tử và được công nhận là các mã thông báo riêng biệt bằng vỏ ngay cả khi chúng không được phân tách khỏi danh sách bằng khoảng trắng.
// nguồn
Tôi nghĩ rằng @rush có thể đưa ra một câu trả lời đúng nếu câu trả lời sai ở đây. Bom ngã ba xác định một chức năng gọi là " :
". Mã trong các dấu ngoặc nhọn không được thực thi cho đến khi hàm được gọi bởi "" cuối cùng :
. Vì vậy, các dấu ngoặc nhọn như nhóm lệnh và các dấu ngoặc nhọn như thân hàm có cú pháp giống nhau nhưng có ngữ nghĩa khác nhau.
Từ cùng một tài liệu như @rush trích dẫn:
Lưu ý rằng vì lý do lịch sử, trong cách sử dụng phổ biến nhất, các dấu ngoặc nhọn bao quanh thân hàm phải được tách ra khỏi thân bằng khoảng trắng hoặc dòng mới. Điều này là do các dấu ngoặc nhọn là các từ dành riêng và chỉ được nhận dạng như vậy khi chúng được phân tách khỏi danh sách lệnh bằng khoảng trắng hoặc metacharacter vỏ khác. Ngoài ra, khi sử dụng dấu ngoặc nhọn, danh sách phải được chấm dứt bằng dấu chấm phẩy, '&' hoặc dòng mới.
function_body
là một compound_command
(cộng với một tùy chọn redirect_list
). Không gian là cần thiết bởi vì {
là một từ dành riêng, không phải là một ký tự đặc biệt.
brace_group
s hành xử khác nhau khi một phần của chức năng và khi không. Tôi đã sử dụng nhóm lệnh để mô tả trường hợp sau và đây là những gì được mô tả trong liên kết của rush.
{
không phải là một toán tử mà là một từ dành riêng và các từ cần phải được tách ra khỏi các từ khác để được coi là khác biệt.