Bagaimana tanda kurung ditafsirkan pada baris perintah?

45

Saat membaca tentang cara mengatur grub, saya menemukan sebuah artikel yang mengklaim bahwa saya perlu menggunakan salah satu dari dua sintaks berikut,

echo \(hd0,0\) >> /boot/grub/grub.conf

atau

echo '(hd0,0)' >> /boot/grub/grub.conf

karena, pada baris perintah, tanda kurung ditafsirkan dengan cara khusus. Apa yang istimewa tentang tanda kurung? Bagaimana mereka ditafsirkan?

Steve Brown
sumber

Jawaban:

46

Tanda kurung menunjukkan subkulit dalam bash. Mengutip man bashhalaman:

(list)    list  is  executed  in  a  subshell  environment (see COMMAND
          EXECUTION ENVIRONMENT below).  Variable assignments and builtin 
          commands that affect the shell's environment do not remain in 
          effect after the command completes.  The return status is the
          exit status of list.

di mana a listhanya urutan perintah normal.

Ini sebenarnya cukup portabel dan tidak khusus untuk sekadar bash. The POSIX Shell Command Bahasa spek memiliki deskripsi berikut untuk (compound-list)sintaks:

Jalankan daftar senyawa dalam lingkungan subkulit; lihat Lingkungan Eksekusi Shell . Penugasan variabel dan perintah bawaan yang mempengaruhi lingkungan tidak akan tetap berlaku setelah daftar selesai.

jw013
sumber
Dalam bash dan cangkang lainnya ...?
jasonwryan
3
bash adalah yang saya tanyakan tentang ...
Steve Brown
5
Apa perbedaan antara $()dan ()?
CMCDragonkai
5
@ CMCDragonkai Substitusi $()is command, ()adalah subshell. Keduanya menjalankan perintah, bedanya adalah apa yang terjadi pada output. Nama-nama jauh lebih mudah dicari daripada simbol. Lihat juga unix.stackexchange.com/q/213530/9537
jw013
12

Daftar perintah yang disematkan di antara tanda kurung berjalan sebagai subkulit.

Variabel dalam subkulit tidak terlihat di luar blok kode dalam subkulit. Mereka tidak dapat diakses oleh proses induk, ke shell yang meluncurkan subkulit. Ini adalah, pada dasarnya, variabel lokal.

Lihat Linuxtopia - Bab 20. Subshell

menandai
sumber