7
votes

Pourquoi PowerShell (avec Perl) enlève-t-il des citations doubles dans une déclaration d'impression simple?

Je suis un utilisateur Linux de longue date mais je suis nouveau à Windows et PowerShell. Je viens d'installer Windows7 et Strawberry Perl 5 pour la première fois. Je veux maintenant faire une simple impression de ligne de commande avec Windows PowerShell.

On dirait que Perl est installé correctement: P>

PS C:\Users\Me> perl -e 'print qq{Hello, World\n}'
Hello, World


1 commentaires

Avez-vous essayé perl -e "print 'hello, monde" "?


3 Réponses :


0
votes

Que se passe-t-il si vous exécutez la commande "mauvais" dans cmd.exe au lieu de PowerShell? Je demande parce que la séquence d'évasion qui fonctionne ( \ ") est Perl's; dans PowerShell, ce serait" "" ".


0 commentaires

1
votes

intéressant. Il semble que lorsque vous quittez le monde PowerShell, il convertit la citation unique en une double devis pour être correctement interprétée par le shell de commandes Windows. (Ou quelque chose comme ça). Pour démontrer avec Python (qui semble présenter le même problème):

PS C:\> $s = 'python -c "print "Hi from python""'
PS C:\> cmd /c $s
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'Hi' is not defined


0 commentaires

4
votes

Je pense qu'il y a quelques problèmes ici. On est que les citations ont une signification symbolique dans PowerShell et Perl. Citations et échapper au travail un peu différemment dans PowerShell que dans une coquille unix. Découvrez l'homme à propos de_quot à PowerShell.

Le deuxième problème est que la ligne de commande Perl se comporte différemment à la période Windows. Toute double citation à l'intérieur de la ligne de commande que vous souhaitez transmettre à Perl doit être échappée en termes de Perl comme \ ». Ceci n'est pas spécifique à PowerShell. C'est la façon dont Perl fonctionne sous Windows. Vous aurez généralement des problèmes similaires avec cmd.exe. p>

Ces versions doivent fonctionner: p> xxx pré>

Vous pouvez faire la même chose avec moins d'échappement à l'aide d'une citation unique. P>

PS> & perl -e "print \`"hello, world`n\`""
hello, world
PS> $s = "print \`"hello, world`n\`""
PS> echo $s
print \"hello, world
\"
PS> & perl -e $s
hello, world


0 commentaires