我要简化以下If-Else语句。
if [[ "$IP" == 192.* ]] || [[ "$IPAddr" == 193.* ]]
then
data="correct data set"
fi
我需要包含更多的[[ "$IP" == 192.* ]]
,并想看看是否有更好的方法来做到这一点,而不是使用太多的||
语句
答案 0 :(得分:5)
使用case
可以更轻松地完成此操作。
case "$IP" in
192.* | 193.*) data="correct data set";;
esac
您可以添加更多由|
分隔的模式。
此外,您可以使用19[23].*
之类的模式来匹配两个字符串。
答案 1 :(得分:2)
由于这是全局匹配,因此可以使用字符范围:
...
transform(value: string, userProp?: any): any {
let userData;
this.userService.getUser(value).subscribe(res => {
userData = res;
if (!userProp) {
return userData;
} else {
const prop = userProp === 'displayName' ? `${userData.firstName} ${userData.lastName}` : oneProjectUser(value)[userProp];
return prop;
}
});
}
...
或外来交替:
# 192.0.0.0 or 193.0.0.0
if [[ "$IP" == 19[23].* ]]
then echo "match"; fi
答案 2 :(得分:0)
您似乎正在专门尝试匹配多个变量($IP
,$IPAddr
)。
如果在两种情况下均表示$IP
,则给出的解决方案是很好的。
否则,每个测试都是A和B比较的不同集合,因此||
的列表可能仍然是最好的选择。您可以 跨行格式化它们,以实现可维护性和可读性,但是...
if [[ "$IP" == 192.* ]] ||
[[ "$IPAddr" == 193.* ]]
then data="correct data set"
fi
&&
和||
设置了跨行上下文。