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