gpt4 book ai didi

powershell - Powershell 中的 If/Else 行为不符合预期?

转载 作者:行者123 更新时间:2023-12-02 18:48:08 24 4
gpt4 key购买 nike

有人可以向我解释为什么下面没有按预期工作吗?在下面的示例中,我希望将 $shortFQDN 变量设置为 test.com,但我要返回 www.test.com:

$fqdn = 'dev.www.test.com'
$d3 = $fqdn.Split('.')[-3] #www
$d2 = $fqdn.Split('.')[-2] #website
$d1 = $fqdn.Split('.')[-1] #com

#Check if this is a 2LD domain (.com.au, .co.uk, .co.jp, etc.)
if ($d1 -ne 'com' -or 'net' -or 'org' -or 'edu' -or 'gov' -or 'biz') {
$shortFQDN = -join ("$d3",'.',"$d2",'.',"$d1")
} else {
$shortFQDN = -join ("$d2",'.',"$d1")
}

我做错了什么?似乎 if/else 处理不正确...

最佳答案

你的if()是错误的。尽管您可以用英语说“如果 a 不是 b 或 c 或 d,则...”,但在几乎所有编程语言和脚本语言中,您都需要说“如果 a 不是 b 并且 a 不是 c 且 a不是 d,那么...”。

不必重做 $fqdn.Split() 三次并每次都对结果添加下标,只需获取第一次的输出,并将其分配给一个变量,然后简单地为该变量添加下标.

此外,PowerShell 允许您使用范围,就像 Pascal 的某些方言一样,并且您可以将 -match 运算符与正则表达式一起使用。我会将你的代码重写为

$fqdn = 'dev.www.test.com'
$d = $fqdn.Split(".") # or $d = $fqdn -split "\."
$tlds = "com|net|org|edu|gov|biz"
if ( -not ($d[-3] -match $tlds) ) {
$shortfqdn = $d[-3..-1] -join "."
} else {
$shortfqdn = $d[-2..-1] -join "."
}

关于powershell - Powershell 中的 If/Else 行为不符合预期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49014673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com