代码之家  ›  专栏  ›  技术社区  ›  CoffeeMonster

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

  •  7
  • CoffeeMonster  · 技术社区  · 17 年前

    PS C:\Users\Me> perl -v 
    This is perl, v5.10.0 built for MSWin32-x86-multi-thread Copyright
    1987-2007, Larry Wall 
    ...
    

    命令行的东西是有效的:

    PS C:\Users\Me> perl -e 'die'
    Died at -e line 1.
    
    PS C:\Users\Me> echo 'print "Hello, World\n"' | perl
    Hello, World
    

    PS C:\Users\Me> perl -e 'print "Hello, World\n"'
    No comma allowed after filehandle at -e line 1.
    

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

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

    为什么PowerShell在单引号内转义双引号?

    3 回复  |  直到 17 年前
        1
  •  3
  •   Brian Reiter    17 年前

    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
    

    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
    
        2
  •  1
  •   zdan    17 年前

    有趣。似乎当你离开powershell世界时,它会将单引号转换为双引号,以便由windows命令shell正确解释。(或者类似的东西)。用python来演示(似乎也出现了同样的问题):

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

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

    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
    
        3
  •  0
  •   dahlbyk    17 年前

    \" )是Perl的;在PowerShell中,它将是“”。