Ada dua sintaks untuk substitusi perintah: dengan dolar-tanda kurung dan dengan backticks. Berjalan top -p $(pidof init)
dan top -p `pidof init`
memberikan hasil yang sama. Apakah kedua cara ini melakukan hal yang sama, atau adakah perbedaan?
265
Jawaban:
Backquote gaya lama
` `
memang memperlakukan backslash dan bersarang sedikit berbeda. Gaya baru$()
mengartikan semuanya( )
sebagai perintah.berfungsi jika backquotes bersarang lolos:
backslash menyenangkan:
Gaya baru ini
$()
berlaku untuk semua shell yang sesuai dengan POSIX .Seperti yang ditunjukkan mouviciel , gaya lama
` `
mungkin diperlukan untuk kulit kerang yang lebih tua.Terlepas dari sudut pandang teknis, gaya lama
` `
juga memiliki kelemahan visual:I like $(program) better than `program`
'`'`''`''`'`''`'
(dan menggunakan SE
` `
untuk tujuan sendiri, itu adalah rasa sakit menulis jawaban ini :)sumber
{ }
biasanya disebut "kurung keriting" atau "kurung kurawal" en.wikipedia.org/wiki/Braces_(punctuation)#Braces`
adalah kunci mati, jadi saya harus mengetikkan backtick ganda (sesuatu yang biasanya saya lupa saya bisa melakukannya) atau backtick lalu spasi, yang merupakan rasa sakit.Perbedaan jelas yang saya amati adalah bahwa Anda tidak dapat membuat sarang backtick sementara Anda bisa bersarang
$()
. Mungkin keduanya ada karena alasan warisan. Demikian pula, perintah.
dansource
adalah sinonim.sumber
source
. Dash adalah salah satu contohnya.$(...)
dan`...`
standar (yang terakhir yang usang) sementara.
standar tapi tidaksource
(t)csh
mereka tidak bisa bersarang.(t)csh
tidak mendukung$(...)
sekalipun. Mereka memang mendukungsource
(dan tidak.
).$()
tidak bekerja dengan shell Bourne lama. Tapi sudahbertahun-tahunsejak saya bekerja dengan shell Bourne tua.sumber
Catatan lain,
$()
akan menggunakan lebih banyak sumber daya sistem daripada menggunakan backticks, tetapi sedikit lebih cepat.Dalam Menguasai scripting shell Unix , Randal K. Michael telah melakukan tes dalam bab bernama "24 Cara untuk Memproses File Baris-demi-Baris".
sumber
$()
membuat skrip Anda satu byte lebih besar daripada jika digunakan`
(dengan asumsi Anda tidak membuat sarang dan tidak menggunakan backslash di dalamnya). Mengenai yang mana akan lebih cepat untuk diuraikan, itu akan bervariasi di antara cangkang dan tidak relevan jika diabaikan dibandingkan dengan biaya pembuatan pipa dan percabangan proses yang memerlukan substitusi.Untuk menambahkan apa yang orang lain katakan di sini, Anda dapat menggunakan backticks untuk mensimulasikan komentar sebaris:
Outputnya adalah:
foo bar
.Lihat yang berikut untuk informasi lebih lanjut: https://stackoverflow.com/a/12797512 (Perhatikan juga komentar di bawah posting itu.)
sumber
The
$()
sintaks tidak akan bekerja dengan shell Bourne tua.Dengan cangkang yang lebih baru
` `
dan$()
setara tetapi$()
jauh lebih mudah digunakan ketika Anda perlu membuat banyak perintah.Misalnya :
lebih mudah untuk mengetik dan debug daripada:
sumber