在PowerShell中是否有IF语句的简写?

时间:2016-09-01 06:42:06

标签: bash powershell

在bash中,我经常做以下事情:

[ -z "${someEnvVar}" ] && someEnvVar="default value"

而不是创建一个完整的if语句:

if [ -z "${someEnvVar}" ]; then someEnvVar="default value"; fi

PowerShell中是否有类似的速记而没有创建函数或别名?

我不想在PowerShell中编写以下内容:

if ("${someVar}" -eq "") {
    $someVar = "default value"
}

4 个答案:

答案 0 :(得分:4)

If对我来说似乎更具可读性,但你可以使用OR的短路(类似于BASH版本):

$someVar = ""
[void]($someVar -ne "" -or ($someVar = "Default"))

$someVar #yields "Default"


$someVar = "Custom"
[void]($someVar -ne "" -or ($someVar = "Default"))

$someVar #yields "Custom"

答案 1 :(得分:2)

我担心Powershell没有像C#那样优雅的解决方案:

Exp1 ? Exp2: Exp3
msg = (age >= 18) ? "Welcome" : "Sorry";

但你可以这样做:

$someVar = if ("${someVar}" -eq "") { "default value" }

答案 2 :(得分:0)

以下是一些选项:

$emptystring = ""

if ($emptystring -eq "") {
    "The string was empty"
}

if (!$emptystring) {
    "The string was null or empty"
}
if (!$someVar) {
    "The value was null or unassigned"
}

if ([string]::IsNullOrEmpty($emptystring)) {
    "The value was null or empty"
}

这会产生以下输出:

The string was empty 
The string was null or empty
The value was null or unassigned  
The value was null or empty

答案 3 :(得分:0)

自PowerShell 7起,您可以使用类似C#的If ? Then : Else语法:

$Variable = -not $Variable ? $Default : $Variable

对于管道,您现在可以使用类似bash的||&&

(Get-Value && Use-Value) || Set-Value $Default

(Get-Value && Use-Value) || (& {Set-Value $Default; Get-Value} | Use-Value)

其中&执行脚本块(我不知道在管道中链接两个命令而不在它们之间传递值的方法)