Soit j'ai manqué un jeu, soit un contrecoup ne semble pas fonctionner avec trop de boucle de devis de programmeur.
$ echo "hello1-`echo hello2-\`echo hello3-\`echo hello4\`\``"
hello1-hello2-hello3-echo hello4
Voulait
hello1-hello2-hello3-hello4-hello5-hello6-...
deprecated
donc utilisés$(cmd)
.Réponses:
Utilisez à la
$(commands)
place:$(commands)
fait la même chose que les backticks, mais vous pouvez les imbriquer.Les extensions de la gamme Bash peuvent également vous intéresser:
la source
si vous insistez pour utiliser des backticks, le suivi pourrait être fait
vous devez mettre des contre-obliques,
\\ \\\\ \\\\\\\\
par 2x et ainsi de suite, c'est juste très moche, utilisez$(commands)
comme autre suggéré.la source
Chaque fois que vous souhaitez évaluer une commande, utilisez
command substitution
:Chaque fois que vous souhaitez évaluer une expression arithmétique, utilisez
expression substitution
:Vous pouvez les imbriquer comme ceci:
Supposons que file1.txt comporte 30 lignes et file2.txt 10 lignes, que vous pouvez évaluer une expression comme celle-ci:
qui produirait 20 (la différence de nombre de lignes entre deux fichiers).
la source
C'est beaucoup plus facile si vous utilisez la
$(cmd)
syntaxe de substitution de commande de bash , qui est beaucoup plus facile à imbriquer:la source
Parfois, l'imbrication de backtick peut être remplacée par
xargs
et des tuyauxLes inconvénients de cette solution sont:
Tous les arguments deviennent séparés par un espace (résoluble avec
tr
):Montrons un vrai cas d'utilisation.
Les commandes suivantes fonctionnent dans bash, mais pas dans tcsh (l'imbrication de backtick n'est pas très bien gérée dans tcsh)
Ils peuvent être remplacés par
la source