Різниця при використанні зворотних посилань у подвійних лапках та одинарних лапках у Bash


12

Чому наступні два виконання відрізняються за результатами? (Мені потрібні подвійні лапки для змінних у моїй можливій команді)

$ 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!

Відповіді:


19

Bash виконує серію розширень до виконання команди ( sudoу цьому випадку). У першому випадку підміна команд виконується, оскільки вона є в подвійних лапках - вона виконується як і ви, отже, помилка. У другому випадку одиничні лапки перешкоджають розширенню, тому зворотні посилання не замінюються, поки оболонка кореня не працює.

Дивіться також https://www.gnu.org/software/bash/manual/bashref.html#Quoting


6

У першому прикладі backticks оцінюється вашою оболонкою (як ви, а не root). Спробуйте з

sudo su -c "echo `whoami`"

У другому з одинарними цитатами 'весь рядок echo `cat /root/root_file`передається кореневій оболонці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.