Arrays 如何仅为整个单词编制索引?

Arrays 如何仅为整个单词编制索引?,arrays,powershell,Arrays,Powershell,假设我有以下几点: $CUBE_input = "ABC; DEF" 如果我执行以下操作 $($($CUBE_input.ToUpper() -split ';' -replace '(^\s+|\s+$)','' -replace '\s+',' ')[0]) 我得到了ABC,使用[1],我得到了DEF(由于正则表达式,没有前导空格),正如预期的那样 但是,如果我没有分号分隔字符串,例如 $CUBE_input = "ABC" 然后再次执行此操作:

假设我有以下几点:

$CUBE_input = "ABC; DEF"
如果我执行以下操作

$($($CUBE_input.ToUpper() -split ';' -replace '(^\s+|\s+$)','' -replace '\s+',' ')[0])
我得到了
ABC
,使用
[1]
,我得到了
DEF
(由于正则表达式,没有前导空格),正如预期的那样

但是,如果我没有分号分隔字符串,例如

$CUBE_input = "ABC"
然后再次执行此操作:
$($($CUBE\u input.ToUpper()-split';'-replace'(^\s+$),''-replace'\s+',''[0])

我回到
A

我需要这样做,无论是否有分号分隔的字符串,它每次只输出单词,不输出字符

如何做到这一点?

使用
(…)
而不是
$(…)
,即使在单元素情况下也会产生字符串数组:

($CUBE_input.ToUpper() -split ';' -replace '(^\s+|\s+$)','' -replace '\s+',' ')[0]
$(…)
,在可扩展字符串之外很少需要
(如果需要在
“…”
字符串中嵌入表达式和命令)

除此之外,您只需要
$(…)
将整个语句(例如
if
do
switch
foreach
,…)嵌入到更大的表达式或命令中,包括将语句作为管道的第一段提供

要将单个表达式或单个命令或管道嵌入到更大的表达式或命令中,请使用
(…)
,以避免
$(…)
的副作用-请参见下文


至于你所尝试的:

$(…)
将管道输出逻辑应用于所附语句,这意味着:

  • 对表达式产生的数组进行枚举,然后收集输出对象,具体情况如下:

    • 用于2个或更多输出对象的常规
      [object[]
      数组
    • 数组元素本身,如果是单个元素数组(如果使用
      @()
      ,则始终会得到
      [object[]]
      数组)
因此,通过使用
$(…)
,由
-split
生成的单元素数组(并由
-replace
操作保留)被有效地展开,元素本身(字符串
'ABC'
)被返回,并对字符串应用索引提取其单个字符;e、 g.
'ABC'[0]
返回
'A'

请注意,上述内容还意味着强类型的2+元素数组通过
$(…)
转换为新的
[object[]]
数组;e、 g:

PS>$([string[]]('a','b')).GetType().Name
对象[]#$(…)枚举了数组并
# !! 在新的[object[]数组中收集元素
相反,
(…)
按原样返回表达式的值:

PS>([string[]]('a','b')).GetType().Name
字符串[]#OK:(…)将数组保持原样