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 $b
contient 5, lorsque backticks bash
tente d’exécuter une commande 5
et 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 -n1
devrait imprimer la première ligne du /etc/passwd
fichier. Mais comme nous utilisons des backticks, cela n’imprime pas cela sur console. Au lieu de cela, il est stocké dans A
variable. 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/passwd
mais 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.