在bash中,我经常做以下事情:
[ -z "${someEnvVar}" ] && someEnvVar="default value"
而不是创建一个完整的if语句:
if [ -z "${someEnvVar}" ]; then someEnvVar="default value"; fi
PowerShell中是否有类似的速记而没有创建函数或别名?
我不想在PowerShell中编写以下内容:
if ("${someVar}" -eq "") {
$someVar = "default value"
}
答案 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)
其中&
执行脚本块(我不知道在管道中链接两个命令而不在它们之间传递值的方法)