7
votes

Interpoler la variable Perl dans la commande shell

Je veux prendre date en tant qu'entrée de l'utilisateur et passez cette entrée à la commande shell ci-dessous.

pour par exemple. xxx

cette variable sera interpolée à Perl?


3 commentaires

essaye le et regarde ce qu'il se passe!


Je ne peux pas essayer ces commandes sinon ce sera grand désordre ici, alors pour la confirmation que je souhaite demander à la variable scalaire sera interpolée à l'intérieur de la commande avec "".


Vous ne pourrez peut-être pas essayer ces commandes exactes, mais vous pourriez simplement essayer une chose de type Hello-World sans faire de désordre.


4 Réponses :


9
votes

Ceci est trivial à tester:

entrée: xxx

sortie: xxx

donc oui.

méfiez-vous des variables contenant des caractères avec une signification spéciale en shell cependant.


1 commentaires

Je suggérerais d'utiliser Imprimer au lieu de dire de sorte que le utilise V5.16 n'est pas requis. Sans le Utiliser PERL V5.16.3 donne une erreur.



10
votes

Vous avez quelques problèmes; Tout d'abord, CD ne prend qu'un seul paramètre. Peut-être que vous vouliez dire quelque chose comme CD XYZ $ date ? Deuxièmement, les backtsks démarrent une coquille qui exécute la commande que vous donnez, qui fera la commande de modifications de la modification, puis une sortie immédiatement, sans effet. (Le répertoire actuel du processus de Perl Parent est laissé inchangé.) Vous recherchez peut-être CHDIR .

Mais oui, l'interpolation fonctionnera; Pour désactiver l'interpolation dans les backtsticks, vous échappez à des caractères spéciaux ( echo xyz \ datation ) ou utilisez qx avec des délimiteurs de devis unique ( qx'echo xyz $ date '). ) / p>


0 commentaires

6
votes

Perldoc a les réponses, comme toujours.

Plus précisément, http://perldoc.perl.org/ perlop.html # Quote-and-Quote-Like-Operators a "oui" dans les interpolats? Colonne (avec une réserve, vous n'avez pas besoin de vous inquiéter ici), alors oui, il est prudent de supposer que votre variable sera interpolée.

Vous pouvez obtenir le même document en exécutant «Perldoc Perlop» à votre commande de commande locale, souvent.


0 commentaires

6
votes

Oui, il interpolera la variable. Cependant, je recommande fortement deux choses:

  • Utilisez qx /../ au lieu des tiques de retour. LI>
  • Définissez la commande que vous utilisez d'abord dans une variable PERL, puis interpolez cette variable. LI> ul>

    le qx /../ est bien parce qu'il le rend plus évident ce que vous faites: p>

    my @command = qw(ls $HOME);
    system @command;   #Will print out "No such directory '$HOME'
    


1 commentaires

@ David W. _ _ Merci beaucoup. C'est une information très utile pour le nouveau venu comme moi.