为什么需要定义$ id = 1?

时间:2018-08-14 07:15:27

标签: powershell

我尝试在Windows PowerShell上自定义我的配置文件。

在读一本书时,我在Microsoft.Powershell_profile.ps1中编写了以下代码。

function Prompt
{
    $id = 1
    $historyItem = Get-History -Count 1
    if($historyItem)
    {
        $id = $historyItem.Id +1
    }

    Write-Host -ForegroundColor DarkGray "`n[$(Get-Location)]"
    Write-Host -NoNewLine "PS:$id > "
    $host.UI.RawUI.WindowTitle = "$(Get-Location)"
    "`b"
}

我可以理解大多数代码的工作原理,但不了解$id = 1(第3行)。

为什么需要此代码? $ id是在第7行中定义的,所以这里不需要$id = 1,对吗?

因此,我尝试执行此代码以及不带$id = 1代码的代码。对我来说,没有区别。

the upper: with $id = 1, the lower: without $id = 1

为什么将$id = 1添加到此代码中?

3 个答案:

答案 0 :(得分:3)

如果未定义$historyItem,则需要它。编写相同功能的另一种方法,也许这更清楚:

function Prompt
{
    $historyItem = Get-History -Count 1
    if($historyItem)
    {
        $id = $historyItem.Id +1
    }
    else
    {
        $id = 1
    }

    Write-Host -ForegroundColor DarkGray "`n[$(Get-Location)]"
    Write-Host -NoNewLine "PS:$id > "
    $host.UI.RawUI.WindowTitle = "$(Get-Location)"
    "`b"
}

答案 1 :(得分:1)

请接受Tomalak的回答。我只想指出,它也可以像这样更简洁地编写:

$id = if($historyItem) { $historyItem.Id +1 } else { 1 }

答案 2 :(得分:1)

不是必需的。您发布的代码需要它,因为它不必要地区分“有历史记录”和“没有历史记录”。如果您删除了$id = 1行并启动了一个新的PowerShell实例,只要命令历史记录为空,您将有一个空的$id

您只需运行即可获得与代码相同的结果

$id = (Get-History -Count 1).Id + 1

因为如果历史记录为空,(Get-History -Count 1).Id的计算结果为空,那么在进行加法运算时会自动将其强制转换为0。