Le texte entre les guillemets est exécuté et remplacé par le résultat de la commande (moins les caractères de fin de ligne, et notez que les comportements du shell varient lorsque la sortie contient des caractères NUL). Cela s'appelle une substitution de commande car elle est substituée par le résultat de la commande. Donc, si vous voulez imprimer 5, vous ne pouvez pas utiliser de backticks, vous pouvez utiliser des guillemets, comme echo "$b"ou tout simplement supprimer une citation et l'utiliser echo $b.
Comme vous pouvez le constater, puisque $bcontient 5, lorsque backticks bashtente d’exécuter une commande 5et qu’il n’existe aucune commande de ce type, il échoue avec un message d’erreur.
Pour comprendre comment fonctionne les backticks, essayez ceci:
$ A=`cat /etc/passwd | head -n1`
$ echo "$A"
cat /etc/passwd |head -n1devrait imprimer la première ligne du /etc/passwdfichier. Mais comme nous utilisons des backticks, cela n’imprime pas cela sur console. Au lieu de cela, il est stocké dans Avariable. Vous pouvez faire écho $Aà cela. Notez que le moyen le plus efficace d’imprimer la première ligne est l’utilisation de la commande, head -n1 /etc/passwdmais je voulais souligner que l’expression à l’intérieur des backticks ne doit pas nécessairement être simple.
Donc si la première ligne de / etc / passwd est root:x:0:0:root:/root:/bin/bash, la première commande sera remplacée dynamiquement par bash à A="root:x:0:0:root:/root:/bin/bash".
Notez que cette syntaxe est celle du shell Bourne. Citer et s'échapper devient rapidement un cauchemar, surtout lorsque vous commencez à les imbriquer. Ksh a introduit l' $(...)alternative qui est maintenant normalisée ( POSIX ) et supportée par tous les shells (même le shell Bourne d'Unix v9). Vous devriez donc $(...)plutôt les utiliser de nos jours, sauf si vous devez être portable sur de très vieux coques Bourne.
Notez également que la sortie de `...`et $(...)sont sujettes à la division de mots et à la génération de noms de fichiers, tout comme le développement de variables (en zsh, la division de mots uniquement), il faudrait donc généralement les citer dans des contextes de liste.