Có gì $()
trong Linux Shell Commands?
Ví dụ:
chmod 777 $(pwd)
Có gì $()
trong Linux Shell Commands?
Ví dụ:
chmod 777 $(pwd)
Câu trả lời:
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.
echo `echo \`echo foo\`` bar
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 $PWD
là 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 .
Vì .
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 đó.
Đ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)
pwd
lệ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ố chmod
và 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 777
mà tôi đoán không bao giờ được sử dụng trong môi trường sản xuất;).