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[]]
- 用于2个或更多输出对象的常规
$(…)
,由-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:(…)将数组保持原样