Làm thế nào là dấu ngoặc đơn được giải thích tại dòng lệnh?


45

Trong khi đọc về cách thiết lập grub, tôi đã bắt gặp một bài báo tuyên bố rằng tôi cần sử dụng một trong hai cú pháp sau đây,

echo \(hd0,0\) >> /boot/grub/grub.conf

hoặc là

echo '(hd0,0)' >> /boot/grub/grub.conf

bởi vì, tại dòng lệnh, dấu ngoặc đơn được diễn giải theo một cách đặc biệt. Điều gì đặc biệt về dấu ngoặc đơn? Chúng được giải thích như thế nào?

Câu trả lời:


46

Dấu ngoặc đơn biểu thị một subshell trong bash. Để trích dẫn man bashtrang:

(list)    list  is  executed  in  a  subshell  environment (see COMMAND
          EXECUTION ENVIRONMENT below).  Variable assignments and builtin 
          commands that affect the shell's environment do not remain in 
          effect after the command completes.  The return status is the
          exit status of list.

trong đó a listchỉ là một chuỗi lệnh bình thường.

Điều này thực sự khá di động và không cụ thể chỉ bashmặc dù. Đặc tả ngôn ngữ lệnh POSIX Shell có mô tả sau cho (compound-list)cú pháp:

Thực hiện danh sách ghép trong môi trường subshell; xem Môi trường thực thi Shell . Các bài tập biến và các lệnh tích hợp có ảnh hưởng đến môi trường sẽ không còn hiệu lực sau khi danh sách kết thúc.


Trong bash và các vỏ khác ...?
jasonwryan

3
Bash là người tôi đã hỏi về ...
Steve Brown

5
Sự khác biệt giữa $()và là ()gì?
CMCDragonkai

5
@CMCDragonkai Là $()thay thế lệnh, ()là một nhánh con. Cả hai đều chạy lệnh, sự khác biệt là những gì xảy ra với đầu ra. Tên dễ tìm kiếm hơn nhiều so với các biểu tượng. Xem thêm unix.stackexchange.com/q/213530/9537
jw013

12

Một danh sách lệnh được nhúng giữa các dấu ngoặc đơn chạy dưới dạng một lớp con.

Các biến trong một lớp con không thể nhìn thấy bên ngoài khối mã trong lớp con. Chúng không thể truy cập được vào tiến trình cha, đến trình bao khởi chạy lớp con. Đây là, trong thực tế, các biến cục bộ.

Xem Linuxtopia - Chương 20. Subshells

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.