2017-07-27 25 views
-1

考虑这个片断:展开一个变量,并用引号把它包

$foo = "b a r" 
Some-Cmdlet -MyParam $foo 

我想通过b a r-MyParam参数。它显然不会工作,因为通话将评估为:

Some-Cmdlet -MyParam b a r 

和空格会将参数拆分为3个单独的字符。我可以添加引号是这样的:

Some-Cmdlet -MyParam '"'+$foo+'"' 

,但我在想,如果有加引号没有连接起来将同时扩大变量的方式。换句话说:不使用+。可能是这样的:

Some-Cmdlet -MyParam "\"$foo\"" 

已经\是一个逃生操作符。

+2

你是否试图将一个变量传递给一个cmdlet并且想要为变量值添加引号?根据变量的形成方式,您可以在第一次设置变量时将引号添加到变量的字符串中(例如,'$ myvar =“\'”my value \'“”'。反引号\'是一个转义字符在Powershell中。 –

+2

“*显然它不会工作,因为调用将评估为:'Some-Cmdlet -MyParam bar'和空格会将参数分成3个单独的字符*” - 这是如何显而易见的?当然它不会那样做 - 即使语言在变量的内容上运行交互式命令行解析器(为什么会这样?),并且将字符串拆分为空格,参数不会是三个单独的字符,因为数组不是空格它会是一个字符和两个未知位置参数的错误。 – TessellatingHeckler

+0

像,它会花更少的时间来尝试它,而不是写所有的和格式化:[TryItOnline上的例子](https:// tio .RUN/## K8gvTy0qzkjNyfn/P600L7kkMz9PoSS1uEShWqEgsSgxV0OlQlNBSVelQldJoZZLJS0/X8FWQSlJIVGhSIkLrFC3Qg EK/P8/AA) – TessellatingHeckler

回答

0

你对字符串解释的假设是错误的。如果你传递一个字符串,它保持一个字符串。

Function '/a r g 1' 
"$($Args[0])" 
> /a r g 1