gpt4 book ai didi

perl - 为什么 PowerShell(使用 Perl)在简单的打印语句中删除双引号?

转载 作者:行者123 更新时间:2023-12-04 15:28:20 24 4
gpt4 key购买 nike

我是一个长期的 Linux 用户,但我是 Windows 和 PowerShell 的新手。我第一次安装了 Windows7 和 Strawberry Perl 5。我现在想用 Windows PowerShell 做一个简单的命令行打印。

看起来 Perl 安装正确:

PS C:\Users\Me> perl -v
这是 perl,为 MSWin32-x86-multi-thread 构建的 v5.10.0 版权所有
1987-2007,拉里·沃尔
...

命令行的东西有效:

PS C:\Users\Me> perl -e 'die'
死于 -e 第 1 行。

PS C:\Users\Me> echo 'print "Hello, World\n"' | perl
你好,世界

但是当我自己尝试这一切时,它会打印一个文件处理程序警告:

PS C:\Users\Me> perl -e 'print "Hello, World\n"'
-e 第 1 行的文件句柄后不允许使用逗号。

所以看起来它删除了双引号。

PS C:\Users\Me> perl -e 'print\"Hello, World\n\"'
你好,世界

这有效,但它丑陋!让我们再试一次:

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

那更像它,但我很困惑。

为什么 PowerShell 会转义单引号中的双引号?
有 PowerShell 用户吗?

最佳答案

我认为这里有几个问题。一是引号在 powershell 和 perl 中都具有象征意义。引号和转义在 powershell 中的工作方式与在 UNIX shell 中略有不同。在 powershell 中查看 man about_quoting 。

第二个问题是 perl 命令行在 Windows 时期的行为不同。您想要传递给 perl 的命令行中的任何双引号都需要在 perl 术语中转义为\"。这并非特定于 powershell。这是 perl 在 Windows 上的工作方式。您通常会遇到类似的问题cmd.exe

这些版本应该可以工作:

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

您可以使用单引号以更少的转义来做同样的事情。
PS> & perl -e 'print \"hello, world\n\"'
hello, world
PS> $s = 'print \"hello, world\n\"'
PS> echo $s
print \"hello, world\n\"
PS> & perl -e $s
hello, world

您还可以将换行符放在 powershell 中,而不是将换行符转义序列传递给 perl 进行解析。
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

关于perl - 为什么 PowerShell(使用 Perl)在简单的打印语句中删除双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1250044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com