Tôi đã thấy cú pháp sau trong một tập lệnh bash:
>$(command) &
Tôi biết rằng dấu và &cuối cùng tạo ra một lệnh chạy trong nền, nhưng tôi chưa bao giờ thấy nó kết hợp với ký hiệu đô la cộng với dấu ngoặc quanh lệnh.
Nó làm gì?
Tôi đã thấy cú pháp sau trong một tập lệnh bash:
>$(command) &
Tôi biết rằng dấu và &cuối cùng tạo ra một lệnh chạy trong nền, nhưng tôi chưa bao giờ thấy nó kết hợp với ký hiệu đô la cộng với dấu ngoặc quanh lệnh.
Nó làm gì?
Câu trả lời:
Đưa ra cú pháp $(command) &, kết quả giống như khi bạn lấy đầu ra của việc chạy commandvà sau đó cố gắng chạy nó dưới dạng một lệnh. Và tất cả điều này sẽ được thực hiện trong nền, có nghĩa là sẽ không có đầu ra có thể nhìn thấy hoặc treo trong thiết bị đầu cuối.
Ví dụ: nếu chúng tôi có một tệp văn bản có tên mycommand.txtvới nội dung:
echo "Hello World"
Sau đó, lệnh
$(cat mycommand.txt) &
sẽ tương đương với việc chạy
echo "Hello World" &
Nhưng vì chúng ta đã thêm ký hiệu và ( &), chúng ta sẽ không thấy bất kỳ đầu ra nào từ lệnh này, vì vậy nó sẽ khá vô dụng trong ví dụ này.
$(Biến)Ký hiệu đô la trước điều trong ngoặc đơn thường đề cập đến một biến. Điều này có nghĩa là lệnh này hoặc là truyền một đối số cho biến đó từ tập lệnh bash hoặc nhận giá trị của biến đó cho một cái gì đó. Sự khác biệt trong kịch bản bash để gọi và khai báo các biến là như sau:
Khai báo một biến không có ký hiệu đô la và gọi nó bằng ký hiệu đô la. Ví dụ: tập lệnh chứa nội dung này
#!/bin/bash
STR="Hello World!"
echo $STR
Sẽ xuất ra cái này
Hello World!
()- Thay thế lệnhThay thế lệnh cho phép đầu ra của một lệnh để thay thế chính lệnh đó. Thay thế lệnh xảy ra khi một lệnh được bao quanh như sau:
$(command)
hoặc là
`command`
Bash thực hiện việc mở rộng bằng cách thực hiện lệnh trong môi trường lớp con và thay thế lệnh thay thế bằng đầu ra tiêu chuẩn của lệnh, với bất kỳ dòng mới nào bị xóa. Các dòng mới được nhúng không bị xóa, nhưng chúng có thể bị xóa trong quá trình tách từ. Việc thay thế lệnh $(cat file)có thể được thay thế bằng tương đương nhưng nhanh hơn $(< file).
&- Quá trình nềnVà sau đó, &ký hiệu, hoặc ký hiệu, như bạn đã nói, được sử dụng để chạy nó trong nền.
nó lấy đầu ra của "lệnh" làm lệnh và chạy nó trong nền. Chức năng của nó là tương đương với "eval"
$( ), nhưng không có phần còn lại. Nó chỉ là$(command) &, đó là những gì làm tôi bối rối.