Powershell 转义的一般方法:

Powershell 转义的一般方法:

后 (Powershell:正确转义撇号)我仍然没有弄清楚如何在通过 plink 执行来自 powershell 的命令时正确获取这些转义。

我试图在 Linux 主机上执行的是

df -k / | tail -1 | awk '{print $4}'

这只是给我免费的KB数量/

由于我使用的是 powershell (Windows),因此我必须构建一个plink命令来将命令发送到服务器。简单来说,它看起来像这样:

& plink -ssh -l $user -batch -pw $pw $user@$IP df -k / | tail -1 | awk '{print $4}'

这失败了,因为 PowerShell 会跳转到|并搜索命令tail。因此,我必须像这样转义管道:

& plink -ssh -l $user -batch -pw $pw $user@$IP df -k / `| tail -1 `| awk '{print $4}'

这给了我awk: cmd. line:1: Unexpected end of string

我认为我必须逃避$4两次,因为 PowerShellLinux Bash 尝试用变量替换它。但我该怎么做呢?使用

\`$4

不会改变信息。

答案1

您可以使用plink -ssh -l $user -batch -pw $pw $user@$IP "df -k / | tail -1 | awk '{print `$4}'"

Powershell 转义的一般方法:

两个双引号之间的转义字符:

  • $需要使用`$
  • "需要使用`"
  • `需要使用``

例外:
尾随(在双引号末尾)$根本不需要转义。

两个单引号之间的转义字符:

  • '需要使用''

未用引号括起来的转义字符:

  • $需要使用`$
  • @需要使用`@
  • #需要使用`#
  • `需要使用``
  • |需要使用`|
  • {并且需要用and}进行转义`{`}
  • ;需要使用`;
  • "需要使用`"
  • '需要使用`'

例外:
尾随(在双引号末尾)$根本不需要转义。

特殊字符总是转义:

  • `0:空字符
  • `a:警报字符
  • `b:退格字符
  • `f:换页符
  • `n:新行字符
  • `r:回车符
  • `t:水平制表符
  • `v:垂直制表符

停止解析特殊字符的特殊方法:

  • 从 Powershell 2.0 开始,您可以使用@' ... '@它来阻止对参数的解释,但@'需要与命令位于同一行,参数需要位于下一行,并且'@需要在参数之后位于自己的行中
  • 从 Powershell 3.0 开始,您可以使用--%以下命令停止解析所有内容:--%

例子:

$h@h#h`h|h{h}h;h"h'h$

  • 用双引号括起来:exampleprogram.exe "`$h@h#h``h|h{h}h;h`"h'h$"
  • 用单引号括起来:exampleprogram.exe '$h@h#h`h|h{h}h;h"h''h'$
  • 未用引号引起来:exampleprogram.exe `$h`@h`#h``h`|h`{h`}h`;h`"h`'h$
  • 使用@' ... '@

exampleprogram.exe @'
$h@h#h`h|h{h}h;h"h'h$
'@

  • 使用--%exampleprogram.exe --% $h@h#h`h|h{h}h;h"h'h$

相关内容