Jawaban:
Ini sangat mirip dengan backticks ``.
Ini disebut substitusi perintah ( spesifikasi posix ) dan memanggil subkulit. Perintah di kurung $()
atau di antara backticks (``) dieksekusi dalam sebuah subkulit dan output kemudian ditempatkan pada perintah asli.
Berbeda dengan backticks, $(...)
formulir dapat disarangkan. Jadi Anda bisa menggunakan substitusi perintah di dalam subtitusi lain.
Ada beberapa perbedaan dalam melarikan diri karakter dalam substitusi. Saya lebih suka $(...)
formulir.
echo `echo \`echo foo\`` bar
Dalam POSIX atau POSIX-seperti kerang ( ksh
, bash
, ash
, zsh
, yash
...), itu seperti ``
: perintah dalam $()
dijalankan dan digantikan oleh keluaran standar. Pemisahan kata dan pembuatan nama file dilakukan kecuali $()
ada di dalam tanda kutip ganda. Jadi
chmod 777 $(pwd)
harus diganti dengan:
chmod 777 "$(pwd)"
untuk menghindari pemisahan kata dan pembuatan nama file pada jalur direktori kerja saat ini.
Atau bahkan lebih baik (kecuali di bawah beberapa shell, seperti zsh, kalau-kalau direktori telah diganti nama):
chmod 777 "$PWD"
Karena $PWD
merupakan variabel khusus yang menyimpan path ke direktori yang aktif di shell POSIX.
Atau lebih baik lagi:
chmod 777 .
Karena .
entri dalam direktori saat ini adalah tautan keras ke direktori itu sendiri.
Ini $()
digunakan untuk mengeksekusi perintah sebagian besar di dalam beberapa perintah lainnya.
chmod 777 $(pwd)
pwd
perintah memberikan direktori kerja saat ini. Jadi, ketika semuanya dieksekusi, output pwd akan menggantikan posisinya dan berfungsi sebagai argumen chmod
, dan hasilnya adalah semua direktori kerja Anda saat ini mendapatkan izin 777
yang saya kira tidak boleh digunakan dalam lingkungan produksi;).