$ () Trong một lệnh là gì?


Câu trả lời:


21

Nó rất giống với backticks ``.

Nó được gọi là thay thế lệnh ( đặc tả posix ) và nó gọi một lớp con. Lệnh trong các dấu ngoặc nhọn $()hoặc beween backticks (``) được thực thi trong một khung con và đầu ra sau đó được đặt trong lệnh gốc.

Không giống như backticks, $(...)hình thức có thể được lồng nhau. Vì vậy, bạn có thể sử dụng thay thế lệnh bên trong thay thế khác.

Có sự khác biệt aso trong việc thoát khỏi các nhân vật trong sự thay thế. Tôi thích $(...)hình thức.


4
backticks có thể được lồng là tốt. Lưu ý rằng các ký tự dòng mới được loại bỏ khỏi đầu ra của lệnh.
Stéphane Chazelas

2
@ StéphaneChazelas làm thế nào backticks có thể được lồng nhau? Bạn có nghĩa là bằng cách trốn thoát?
hỗn loạn

3
Có: thích vớiecho `echo \`echo foo\`` bar
Stéphane Chazelas

1
Bất kỳ tài liệu tham khảo chính thức nói rằng backticks bị phản đối?
vinc17

1
Tìm thấy câu trả lời này: unix.stackexchange.com/questions/126927/ dường như họ không được phản đối. Thay đổi câu trả lời của tôi, cảm ơn
sự hỗn loạn

5

Trong POSIX hoặc POSIX giống như vỏ ( ksh, bash, ash, zsh, yash...), nó cũng giống như ``: bên trong lệnh $()được thực hiện và thay thế bằng sản lượng tiêu chuẩn của nó. Chia tách từ và tạo tên tệp được thực hiện trừ khi $()nằm trong dấu ngoặc kép. Như vậy

chmod 777 $(pwd)

nên được thay thế bằng:

chmod 777 "$(pwd)"

để tránh việc tách từ và tạo tên tệp trên đường dẫn thư mục làm việc hiện tại.

Hoặc thậm chí tốt hơn (ngoại trừ dưới một số shell, như zsh, trong trường hợp thư mục đã được đổi tên):

chmod 777 "$PWD"

Kể từ khi $PWDlà một biến đặc biệt chứa đường dẫn đến thư mục làm việc hiện tại trong vỏ POSIX.

Hoặc thậm chí tốt hơn:

chmod 777 .

.mục trong thư mục hiện tại là một liên kết cứng đến chính thư mục đó.


2

Điều này $()được sử dụng để thực hiện một lệnh chủ yếu bên trong một số lệnh khác.

chmod 777 $(pwd)

pwdlệnh cho thư mục làm việc hiện tại. Vì vậy, khi toàn bộ điều được thực hiện, đầu ra của pwd sẽ thay thế vị trí của nó và đóng vai trò là đối số chmodvà kết quả là tất cả thư mục làm việc hiện tại của bạn có được sự cho phép 777mà tôi đoán không bao giờ được sử dụng trong môi trường sản xuất;).

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.