我想检查一个字符串是否以“节点”开始,例如。“node001”。类似的
if [ $HOST == user* ]
then
echo yes
fi
我怎样才能正确地做呢?
我进一步需要组合表达式来检查HOST是否为“user1”或以“node”开头
if [ [[ $HOST == user1 ]] -o [[ $HOST == node* ]] ];
then
echo yes
fi
> > > -bash: [: too many arguments
我怎样才能正确地做呢?
如果您正在使用最新版本的Bash (v3+),我建议使用Bash正则表达式比较运算符=~,例如,
if [[ "$HOST" =~ ^user.* ]]; then
echo "yes"
fi
要在正则表达式中匹配这个或那个,使用|,例如,
if [[ "$HOST" =~ ^user.*|^host1 ]]; then
echo "yes"
fi
注意——这是“正确的”正则表达式语法。
User *表示使用和零次或多次出现r,因此使用和userrrr将匹配。
用户。*表示用户和零或多次出现任何字符,因此user1, userX将匹配。
^用户。*表示匹配模式用户。*在$HOST的开头。
如果您不熟悉正则表达式语法,请尝试参考此资源。
请注意,Bash =~操作符仅在右侧为unquote时进行正则表达式匹配。如果你在右边引用,“模式的任何部分都可以被引用,以迫使它作为字符串进行匹配。”即使在进行参数展开时,也不应该在右边引用。