为什么我不能在文本中使用$ _,因为可以使用其他变量?
Get-ChildItem -Path $path -filter *.mp3 | foreach {
$count++;
write-host "File${count}=${_.Name}";
}
我知道我可以这样写:
Get-ChildItem -Path $path -filter *.mp3 | foreach {
$count++;
write-host "File${count}=$($_.Name)";
}
答案 0 :(得分:4)
当你写${_.Name}
时,你实际上是在询问名为_.Name
的变量,而不是Name
变量的$_
属性。
PS > ${_.Name} = "test"
PS > Get-Variable _*
Name Value
---- -----
_.Name test
$($_.Name)
的作用原因是因为$()
表示“先处理”,所以您可以在里面指定任何内容。在这种情况下,您只需指定一个变量名称和您想要的属性,但您也可以使它更复杂,如:
PS > $a = 1
PS > "A's value is 1(true or false?): $(if($a -eq 1) { "This is TRUE!" } else { "This is FALSE!" })"
A's value is 1(true or false?): This is TRUE!
PS > $a = 2
PS > "A's value is 1(true or false?): $(if($a -eq 1) { "This is TRUE!" } else { "This is FALSE!" })"
A's value is 1(true or false?): This is FALSE!