Разница при использовании обратных кавычек в двойных кавычках и одинарных кавычек в 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в данном случае). В первом случае подстановка команды выполняется потому, что она в двойных кавычках - она ​​выполняется как вы, отсюда и ошибка. Во втором случае одинарные кавычки предотвращают расширение, поэтому обратные кавычки не подставляются, пока не будет запущена оболочка root.

Смотрите также https://www.gnu.org/software/bash/manual/bashref.html#Quoting.


6

В первом примере обратные пометки оцениваются вашей оболочкой (как вы, а не как root). Попробуй с

sudo su -c "echo `whoami`"

Во втором с одинарными кавычками 'вся строка echo `cat /root/root_file`передается в корневую оболочку.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.