我正在尝试理解Powershell如何在命令行上处理变量表达式(例如,作为cmdlet的参数)。我似乎不能确切地理解它是如何解析涉及多个变量(和/或变量的属性)的表达式的。下面是一些基于以下预定义变量的示例:
$a = 'abc'
$b = 'def'
$f = Get-ChildItem .\Test.txt # assuming such a file exists in the current directory
示例1:
echo $a$b
输出:abcdef
示例2:
echo $a\$b
输出:abc\def
示例3:
echo $f.BaseName
输出:Test
示例4:
echo $a\$f.BaseName
输出:abc\C:\Test.txt.BaseName
基本上,我不明白为什么我可以组合两个变量(示例1和2),我可以使用变量属性(示例3),但我不能将变量与其他变量属性组合(示例4)。我已经尝试了各种转义序列(使用反引号),但都没有效果。
我意识到我可以使用$()
风格的表达式来实现这一点,例如:
echo $($a + '\' + $f.BaseName)
我只是不明白为什么另一个表单(示例4)是无效的--在我看来,它看起来更干净。
发布于 2018-06-07 03:04:07
$()
和()
之间有一些细微的区别。我要说的是,在您的示例中,也是在大多数情况下,您应该使用()
。
当您需要更复杂的东西,或者需要在()
中不起作用的表达式时,可以使用$()
。请注意,$()
的输出基本上类似于管道的输出,因此一些您可能没有预料到的事情将会发生。例如,查看这两个命令的输出:
(1..10 -as [string[]]).GetType()
$(1..10 -as [string[]]).GetType()
在第二种情况下,展开[string[]]
数组,然后将其重新分组为PowerShell的默认数组输出类型[object[]]
。
https://stackoverflow.com/questions/50727510
复制相似问题