12
votes

Problème avec des backticks dans le script shell

J'ai un problème à obtenir mon shellscript fonctionnant en utilisant des backtsticks. Voici un exemple de version du script que j'ai un problème avec: xxx

La sortie de ce script est la suivante: xxx

pourquoi La première backtick utilisant une variable pour la commande n'exécute pas réellement la commande complète, mais renvoie uniquement la sortie de la première commande avec la deuxième commande? Il me manque quelque chose afin d'obtenir la première backtick pour exécuter la commande?


4 commentaires

Les backtsticks sont horriblement obsolètes et ne doivent plus être utilisés - en utilisant $ () sauvera de nombreux maux de tête


Veuillez vous reporter à BashFAQ / 050 (Ne mettez pas les commandes dans les variables) et Bashfaq / 048 (évitez d'utiliser eval ). En outre, votre Shebang dit "#! / Bin / sh" et votre invite dit "sh", mais votre étiquette de questions indique [bash] qui n'est pas la même chose.


Je n'ai pas réglé l'étiquette Bash, un autre utilisateur a changé après avoir posté ceci.


POSIX SH prend en charge $ () . Il n'y a pas d'excuse.


4 Réponses :


0
votes

Dans votre premier exemple ECHO est l'analyse des paramètres - la coque ne les voit jamais. Dans le deuxième exemple, cela fonctionne parce que la coquille fait l'analyse et sait quoi faire avec un tuyau. Si vous changez d'écho_cmd pour être "Bash Echo ...", cela fonctionnera.


0 commentaires

16
votes

Vous devez utiliser eval pour le faire fonctionner xxx

à la place de xxx

sans < code> eval xxx

qui sera étendu à xxx

sera traité comme argument sur echo et sera émis verbatim. Avec eval cette ligne sera effectivement exécuter .


0 commentaires

0
votes

bash s'échappe votre commande pour vous. Essayez xxx

ou même mieux, essayez de set -x sur la première ligne, de sorte que vous voyez ce que Bash fait


0 commentaires

2
votes

vous bonjour,

Vous devez savoir eval em> commande. p>

Voir: p>

help eval


0 commentaires