最近,每当涉及双引号时,我在使用PowerShell的GnuWin32时遇到了一些麻烦.
经过进一步调查,看起来PowerShell正在从命令行参数中删除双引号,即使正确转义也是如此.
PS C:\Documents and Settings\Nick> echo '"hello"'
"hello"
PS C:\Documents and Settings\Nick> echo.exe '"hello"'
hello
PS C:\Documents and Settings\Nick> echo.exe '\"hello\"'
"hello"
Run Code Online (Sandbox Code Playgroud)
请注意,双引号在传递给PowerShell的echo cmdlet时会出现,但是当作为参数传递给echo.exe时,除非使用反斜杠进行转义,否则将删除双引号(即使PowerShell的转义字符是反引号,而不是反斜杠).
这对我来说似乎是个错误.如果我将正确的转义字符串传递给PowerShell,那么PowerShell应该处理可能需要的任何转义,但是它会调用该命令.
这里发生了什么?
目前,修复方法是根据这些规则转义命令行参数(这似乎是CreateProcessPowerShell用来调用.exe文件的API调用):
\"- >"\\\\\"- >\\"\\- >\\请注意,可能需要进一步转义双引号以将Windows API转义字符串中的双引号转义为PowerShell.
下面是一些例子,与echo.exe从的GnuWin32:
PS C:\Documents and Settings\Nick> echo.exe "\`""
"
PS C:\Documents and Settings\Nick> echo.exe "\\\\\`""
\\"
PS C:\Documents and Settings\Nick> echo.exe "\\"
\\
Run Code Online (Sandbox Code Playgroud)
我想如果你需要传递一个复杂的命令行参数,这很快就会成为地狱.当然,这些都没有记录在CreateProcess()PowerShell文档中.
另请注意,将双引号的参数传递给.NET函数或PowerShell cmdlet不是必需的.为此,您只需要将双引号转义为PowerShell.
我有一个包含列表的文件:
line1
line2
line3
.
.
.
Run Code Online (Sandbox Code Playgroud)
我想将所有内容加入 bash 中的字符串中,如下所示:
"line1", "line2", "line3", ...... (no comma at the end)
Run Code Online (Sandbox Code Playgroud)
我怎么做?
编辑:这不是如何使用自定义分隔符将多行文件名连接成一行的重复项?因为我试图在加入时将每个项目都用双引号引起来。