Perbedaan saat menggunakan backticks dalam tanda kutip ganda dan tanda kutip tunggal di Bash

12

Mengapa dua eksekusi berikut berbeda dalam output? (Saya perlu tanda kutip ganda untuk variabel dalam perintah akhirnya saya)

$ sudo su -c "echo `cat /root/root_file`"
cat: /root/root_file: Permission denied
$ sudo su -c 'echo `cat /root/root_file`'
Yay, highly classified content!
Ambidex
sumber

Jawaban:

6

Pada contoh pertama, backticks dievaluasi oleh shell Anda (seperti Anda dan bukan root). Coba dengan

sudo su -c "echo `whoami`"

Dalam yang kedua dengan tanda kutip tunggal 'seluruh string echo `cat /root/root_file`dilewatkan ke shell root.

Matteo
sumber