我有以下If-Else语句,我想简化。
if [[ "$IP" == 192.* ]] || [[ "$IPAddr" == 193.* ]]
then
data="correct data set"
fi
我需要包含更多的[[ "$IP" == 192.* ]]
,并希望看看是否有更好的方法来做同样的事情,而不是使用太多的||
语句
你可以使用case
更轻松地完成它。
case "$IP" in
192.* | 193.*) data="correct data set";;
esac
您可以添加由|
分隔的更多模式。
此外,您可以使用像19[23].*
这样的模式来匹配两个字符串。
由于这是一个glob匹配,你可以使用一个字符范围:
# 192.0.0.0 or 193.0.0.0
if [[ "$IP" == 19[23].* ]]
then echo "match"; fi
或者是一个extglob交替:
# 192.0.0.0 or 10.0.0.0
if [[ "$IP" == @(192|10).* ]]
then echo "match"; fi
你似乎特意试图匹配多个变量($IP
,$IPAddr
)。
如果你的意思是$IP
两种情况,那么给出的解决方案是好的。
否则,每个测试都是一组独特的A和B比较,所以||
的列表可能仍然是你最好的选择。您可以跨行格式化它们,以实现可维护性和可读性,但......
if [[ "$IP" == 192.* ]] ||
[[ "$IPAddr" == 193.* ]]
then data="correct data set"
fi
&&
和||
建立了跨越线的背景。