Différence lors de l'utilisation de guillemets doubles entre guillemets et de guillemets simples dans Bash


12

Pourquoi les deux exécutions suivantes diffèrent-elles en sortie? (J'ai besoin de guillemets doubles pour les variables dans ma commande éventuelle)

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

Réponses:


19

Bash effectue une série d'extensions avant l'exécution de la commande ( sudodans ce cas). Dans le premier cas, la substitution de commande est effectuée car elle est entre guillemets - elle s'exécute comme vous, d'où l'erreur. Dans le second cas, les guillemets simples empêchent les expansions, donc les backticks ne sont pas substitués tant que le shell de root n'est pas en cours d'exécution.

Voir aussi https://www.gnu.org/software/bash/manual/bashref.html#Quoting


6

Dans le premier exemple, les backticks sont évalués par votre shell (comme vous et non comme root). Essayez avec

sudo su -c "echo `whoami`"

Dans le second avec les guillemets simples, 'la chaîne entière echo `cat /root/root_file`est passée au shell racine.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.