[[ " stop start status " =~ " $2 " && (($#<3)) ]] || { echo "Usage $0 file_name command"; exit 1;}
Run Code Online (Sandbox Code Playgroud)
我经常使用上述解决方案来检查我的 Bash 脚本的输入范围。
现在我意识到扩展的算术表达式(())看起来像是在双括号内被抑制了[[]]。
为了说明问题:
a=start; n=1; [[ " stop start status " =~ " $a " && (($n<3)) ]] && echo ok || echo bad
ok
a=start; n=5; [[ " stop start status " =~ " $a " && (($n<3)) ]] && echo ok || echo bad
bad
# But:
a=start; n=100; [[ …Run Code Online (Sandbox Code Playgroud) 我发现我可以在4.2.10(1)BASH中使用=~ operator而不是exprcommand.它(在一个命令中)要快得多,expr而且这个事实在重复循环中很重要.
我能够使用正则表达式的大多数元字符但不是全部.
例如,我可以检查字符串是否匹配3个重复(一个小写字母,一个数字,一个点):
[[ "b3.f5.h3." =~ ^([a-z][0-9]\.){3}$ ]] && echo OK
OK
Run Code Online (Sandbox Code Playgroud)
我可以选择匹配的子串:
[[ "whatis12345thetwo765nmbers" =~ ^[a-z]+([0-9]+)[a-z]+([0-9]+) ]] && \
echo "The two number fields are: ${BASH_REMATCH[1]} ${BASH_REMATCH[2]}"
The two number fields are: 12345 765
Run Code Online (Sandbox Code Playgroud)
但我想使用更多元字符,例如此TLDP页面上列出的元字符.
我特别想匹配字边界:\b,\B,\<,\>.
我试图在Advanced Bash-Scripting Guide(第18章和第37章)中找到答案,但没有成功.
我在哪里可以找到=~运营商的详细说明?
目前我只对BASH感兴趣而不是gawk,sed,perl或其他工具.