$ (Lệnh) & làm gì?


10

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 biết loại sử dụng đó $( ), 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.
AlphaOmega

Câu trả lời:


20

Câu trả lời ngắn

Đư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 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.


Câu trả lời dài (Giải thích)

Ký hiệu đô la $(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!

Dấu ngoặc đơn ()- Thay thế lệnh

Thay 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).

Ampersand &- Quá trình nền

Và sau đó, &ký hiệu, hoặc ký hiệu, như bạn đã nói, được sử dụng để chạy nó trong nền.


2

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"


Nó là một biểu tượng có trong cửa sổ terminal, tùy thuộc vào những gì bạn đang cố gắng có thể không cần thiết cho mục nhập của bạn. Khi bạn mở một thiết bị đầu cuối, bạn sẽ thấy nó ở đó ngay lập tức.
monkeyman_stones

Tôi không hiểu Mặc dù ngắn, điều này trả lời câu hỏi thực tế trong khi câu trả lời được chấp nhận thì không.
mveroone
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.