【问题标题】:Set a default value for variable in Powershell [duplicate]在Powershell中为变量设置默认值[重复]
【发布时间】:2017-01-02 10:52:12
【问题描述】:

在 bash 中,如果未设置 UserName,我可以执行以下操作将 name 设置为默认值:

name=${UserName:-James}

Powershell 是否支持这样的功能?

【问题讨论】:

  • 作为参数还是只作为变量?

标签: powershell


【解决方案1】:

使用函数和参数,我们可以做一些我相信你正在做的事情。

一个函数示例:

function WriteUser
{
    param($user = "A User",
    $message = "Message")
    Write-Host $user
    Write-Host $message
}

不带参数调用函数

WriteUser

会给你输出:

一个用户

留言

WriteUser -user "Me" -message "Error"

会写如下:

错误

一些额外的注意事项,您不必使用参数名称。

WriteUser "Bob" "All Systems Go" would work by the order of the parameters.

您也可以切换命名参数的顺序:

WriteUser -message "Error" -user "user, user"

并且该函数将把正确的参数。

否则,我相信您将不得不做一些事情来近似三元行为,例如:

function Like-Tern
{
    for ($i = 1; $i -lt $args.Count; $i++)
    {
        if ($args[$i] -eq ":")
        {
            $coord = $i
            break
        }
    }
    
    if ($coord -eq 0) { throw new System.Exception "No operator!" }
    $toReturn
    if ($args[$coord - 1] -eq "")
    {
        $toReturn = $args[$coord + 1]
    }
    else 
    {
        $toReturn = $args[$coord -1]
    }
    
    return $toReturn
}

Credit for the idea here 函数文件还可以包括:

Set-Alias ~ Like-Tern -Option AllScope

然后你会像这样使用它:

$var = ~ $Value : "Johnny"

当然,~ 完全是任意的,因为我无法让${ 工作......

【讨论】:

  • 进一步证明 PowerShell 的设计者不知道他们在做什么......
  • 请注意,“~”默认是指主目录,就像在 Unix shell 中一样。
  • @RaúlSalinas-Monteagudo 3 年前,我根本不会真正考虑到这一点!但随着 PowerShell 在 Linux 上变得越来越重要,这是一个很好的呼吁。
猜你喜欢
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 2012-08-14
  • 2021-12-29
  • 2015-01-04
  • 1970-01-01
相关资源
最近更新 更多