powershell - 在 Powershell 中转义引号
问题描述
在 Powershell 中,我想运行以下命令:
bash -c "echo 'hello world!'"
(我知道我可以直接使用echo
or Write-Host
,但我需要使用bash -c
)并且我想hello
用单引号和world
双引号括起来。换句话说,我想要以下输出:
'hello' "world"!
我应该避开那些引号吗?
解决方案
由于您正在调用程序(例如bash
)“正常”规则来转义引号字符,因此不一定以“相同”的方式工作。您将参数传递给程序,而不是 PowerShell 解释字符串(通常遵循“正常”引用规则) 。这以完全不同的方式解释。
TLDR:要转义引号字符需要以下命令:
bash -c "echo \'Hello\' \\\""World\\\""!"
输出:
'Hello' "World"!
现在看起来非常复杂。所以,让我们分解一下。
bash
首先,输出所需报价的正确命令是什么?让我们尝试常规引号:
HAL9256@HAL9000:~$ echo 'Hello' "World"!
Hello World!
没有引号。哦耶!我必须逃离他们。在bash
我必须用反斜杠(\
)转义它们:
HAL9256@HAL9000:~$ echo \'Hello\' \"World\"!
'Hello' "World"!
我们有它。我们必须使用一个反斜杠来正确地转义我们在bash
. 因此,让我们将其插入 PowerShell:
PS C:\> bash -c "echo \'Hello\' \"World\"!"
/bin/bash: -c: line 0: unexpected EOF while looking for matching `"'
/bin/bash: -c: line 1: syntax error: unexpected end of file
好吧,那没有用。哦,对了,在PowerShell中,我们必须用反引号 (`) 转义双引号,因为它们位于一组双引号中:
PS C:\> bash -c "echo \'Hello\' \`"World\`"!"
'Hello' World!
好吧,这并没有出错,但仍然不是我们想要的。引号仍然没有正确转义。嗯。在这里,您开始输入 100 种不同的字符组合,以找出正确的组合;-)。
或者,让我们回过头来bash
弄清楚可能发生了什么。首先,让我们记住正在echo
编辑的字符串被解释为字符串。因此,让我们在 echo 语句周围加上双引号,以便将其视为字符串,看看它做了什么。请记住,我们想要的输出是bash
之前的相同命令,带有反斜杠:
HAL9256@HAL9000:~$ echo "\'Hello\' \"World\"!"
\'Hello\' "World"!
好吧,最终我们想要发送的bash
是带有反斜杠的原始字符串。在这里我们可以看到反斜杠正在转义双引号并消失。因此,添加更多斜杠:
HAL9256@HAL9000:~$ echo "\'Hello\' \\"World\\"!"
\'Hello\' \World\!
哦,太好了。我们避开了反斜杠。像《盗梦空间》一样,不断添加转义字符直到它起作用....
HAL9256@HAL9000:~$ echo "\'Hello\' \\\"World\\\"!"
\'Hello\' \"World\"!
那里!我们有我们的输出。现在我们必须将它输入到 PowerShell 中:
PS C:\> bash -c "echo \'Hello\' \\\"World\\\"!"
/bin/bash: -c: line 0: unexpected EOF while looking for matching `"'
/bin/bash: -c: line 1: syntax error: unexpected end of file
哦!是的,和以前一样的错误。我们必须记住用反引号转义 PowerShell 中的双引号:
PS C:\> bash -c "echo \'Hello\' \\\`"World\\\`"!"
'Hello' "World"!
成功!只需要大量的转义,无论是bash
-wize 还是 PowerShell-wize。另一种方式,在我看来,在双引号内转义更容易理解的方式是使用两个双引号而不是像这样的反引号:
PS C:\> bash -c "echo \'Hello\' \\\""World\\\""!"
'Hello' "World"!
推荐阅读
- excel - 如何使用VBA将包含某些文本的行复制到另一个工作表
- spring - Spring Boot 和 Kafka 升级打破了我的测试
- javascript - 如何在 PeerJs 中添加用户名字段
- python - 使用文件名作为数据框中的列标题
- android - 如果从服务更新对象,RealmObject.addChangeListener 不起作用
- python - 如何使用 Python 在 csv 行的末尾编写列表的单个元素?
- javascript - 谷歌字体 api - json 循环
- excel - 424 错误 VBA - 用户表单在我的机器上工作,但同事工作簿上出现错误
- php - 将自定义数据从联系人表单字段发布到 API 不起作用的 Mailchimp 列表
- sql - SQL Cross 适用于旋转逗号分隔值