Powershell - escaping string passed to child process

后端 未结 1 1823
一整个雨季
一整个雨季 2020-11-28 00:01

I spent some time figuring out the correct syntax for a Powershell script. However in the end it was trial and error approach and I would like to know why the syntax below d

相关标签:
1条回答
  • 2020-11-28 00:07

    It is how PowerShell.exe parse its command line. It mostly follows .NET rules of command line parsing:

    • Space is an argument separator. PowerShell.exe will join individual arguments by single space regardless of how many spaces you use to separate arguments.

      CMD> PowerShell -Command echo 'multiple   spaces'
      multiple spaces
      
    • If you want to include space in argument value, then you should enclose space in double quotes. Double quotes itself are not a part of resulting argument value and can be anywhere inside argument:

      CMD> PowerShell -Command echo 'mult"iple   spa"ces'
      multiple   spaces
      
    • If you want literal double quote to be part of argument value, then you have to escape it with backslash:

      CMD> PowerShell -Command echo 'literal\"double\"quotes'
      literal"double"quotes
      
    • If you want literal backslash to precede double quote, then you have to escape that backslash with another backslash. Other than that, backslash interpreted literally and does not need to be escaped:

      CMD> PowerShell -Command echo 'back\\slash\\"   something\\else\\"'
      back\\slash\   something\\else\
      
    0 讨论(0)
提交回复
热议问题