喷涂以空格开头的变量

问题描述

有没有一种方法可以继续使用以空格开头的名称,并以空格开头?

所以这当然有效:

$Splat = @{
name = 'chrome'
fiLeversioninfo = $true
}
(Get-Process @Splat)[0]

对我来说,它返回:

ProductVersion   FiLeversion      FileName
--------------   -----------      --------
84.0.4147.125    84.0.4147.125    C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

现在,如果我将变量名更改为'Chrome File Path and Version',我会得到:

${ Chrome File Path and Version } = @{
name = 'chrome'
fiLeversioninfo = $true
}

该变量有效,并返回属性

Name                           Value
----                           -----
fiLeversioninfo                True
name                           chrome

但是尝试对其进行喷射,它认为由于括号,我试图创建一个哈希表:

At line:5 char:23
+ (Get-Process @{ Chrome File Path and Version })[0]
+                       ~
Missing '=' operator after key in hash literal.

所以我的问题是,有人知道一种方法来喷射需要在方括号内的变量吗? 我很清楚一个简单的

$splat = ${ Chrome File Path and Version }

可以,但是问题不是解决方法,即使有一种方法可以使用空格作为第一个字符来对变量进行喷溅。 我已经尝试过使用转义字符,单/双引号,子表达式和管道将名称放下,但是对此没有任何文档,我敢肯定它不被支持:/

另外,万一有问题,我仍使用5.1.19041.1版本

解决方法

Splatting是一种将参数值集合作为一个单元传递给命令的方法,它应该使您的命令更短,更易于阅读

Ok PowerShell提供了一种在变量名称中使用特殊字符的方法,但是我认为这不是一个好习惯,应该知道它的存在,而不应该使用它。

一个很简单的事实,它使用布雷特(brickt)干扰了Splating中哈希表的初始化。因此,正如@Roman Kuzmin所建议的那样,它根本不受支持

,

这就像您希望拥有这样的变量名:variable with space = 1;用其他语言。 This is not supported

, 除了这个想法的可怕性外,在PowerShell中进行散布目前还很有限,因此最好使用中间变量。有一个RFC草案可以改善here的外观,但是目前尚未计划其实现。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...