对于固定的前缀长度,我可以这样做:
[ a${filename:0:2} = a.# ] && echo temporary emacs file
Run Code Online (Sandbox Code Playgroud)
如何为任意前缀做到这一点?
有更干净的方式吗?
Ign*_*ams 46
[[
的=
运营商需要在正确的操作模式.
var=123
[[ 1234 = $var* ]] && ...
Run Code Online (Sandbox Code Playgroud)
t0r*_*r0X 22
这里是Ignacio答案的'正则表达式'版本(2015年,bash 3.x和更新版本),使用运算符=~
:
[[ "1234" =~ ^12 ]] && echo y
Run Code Online (Sandbox Code Playgroud)
如果您需要来自变量的动态前缀:
var=12
[[ "1234" =~ ^$var ]] && echo y
Run Code Online (Sandbox Code Playgroud)
使用复杂的正则表达式时,可以将它们放在自己的变量中:
var=12
var2=a
regex="^${var}.+${var2}.+$"
[[ "1234a567" =~ $regex ]] && echo y
Run Code Online (Sandbox Code Playgroud)
另请参阅命令上Bash手册页的'Conditional Constructs'部分[[
:
可以使用另一个二元运算符=〜,其优先级与==和!=相同.使用它时,操作符右侧的字符串被视为扩展正则表达式并相应地匹配(如在regex(3)中).如果字符串与模式匹配,则返回值为0,否则返回1.如果正则表达式在语法上不正确,则条件表达式的返回值为2.如果启用了shell选项nocasematch,则执行匹配而不考虑字母字符的情况.与正则表达式中带括号的子表达式匹配的子字符串保存在数组变量BASH_REMATCH中.索引为0的BASH_REMATCH元素是与整个正则表达式匹配的字符串部分.