1

为什么我不能在文本中使用 $_ ,因为可以使用其他变量?

    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)"; 
    }
4

1 回答 1

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!
于 2013-10-26T11:00:05.947 回答