Menggunakan backticks atau dolar dalam skrip shell

9

Saya sibuk menulis skrip shell (menggunakan Bash) di mana saya perlu mengisi beberapa variabel dari hasil yang dikembalikan dari perintah lain.

Jadi saya menggunakan sintaks seperti ini:

VAR=`command 2>/dev/null`

Tetapi ketika mencari informasi tentang shell skrip, saya sering menemukan bahwa di atas dapat dicapai dengan menggunakan sintaks berikut juga:

VAR=$(command 2>/dev/null)

Keduanya bekerja untuk saya (saya telah menerima hasil yang diharapkan dalam kedua kasus) dan saya bertanya-tanya apakah saya masih dapat menggunakan kedua bentuk secara bergantian atau jika saya harus tetap menggunakan satu formulir untuk memastikan tetap mematuhi evolusi masa depan cangkang?

Justin
sumber
Tautan oleh belacqua menawarkan banyak informasi tentang perbedaan dan penggunaannya. Menutup karena tidak terkait dengan masalah Ubuntu, tetapi lebih merupakan masalah pemrograman. Saya sangat merekomendasikan mengikuti tautan yang disebutkan di atas.
Luis Alvarado

Jawaban:

13

Gunakan dolar. Backtick semi-usang , karena lebih rumit untuk digunakan (lihat tautan), dan tidak ada keuntungan bagi mereka kecuali Anda melakukan golf kode dan benar-benar perlu menyimpan satu karakter. Mereka mungkin tidak akan dihapus dari cangkang populer dalam waktu dekat, jadi Anda aman menggunakannya untuk saat ini.

l0b0
sumber
3

Tetap dengan notasi tanda dolar $()kapan pun Anda bisa. Backtick menjadi rumit / membingungkan ketika Anda mulai perlu melakukan pengutipan bersarang. Ex:

$ FOO=`echo "foo's"`
$ echo $FOO
foo's

Mengganti backticks dengan $()menghasilkan output yang sama, dan lebih mudah dibaca (lebih sedikit kutipan dari sudut varrying untuk dilihat):

$ FOO=$(echo "foo's")
$ echo $FOO
foo's

Itu, dan setiap tanda kutip (kutipan tunggal, kutipan ganda, backtick) berarti sesuatu yang berbeda di shell, jadi menggunakan $ dapat membantu menghilangkan tingkat kompleksitas. Dan pengembang yang mengikuti Anda akan berterima kasih, karena dia akan memiliki waktu yang lebih mudah untuk mengetahui apa yang Anda lakukan.

Harun
sumber
Backticks bahkan tidak dapat disarangkan secara fungsional.
Bernhard
@Bernhard Teladan saya menunjukkan apa yang ada dalam pikiran saya dengan pernyataan itu.
Aaron