如何测试变量以bash中的字符串开头?

时间:2010-11-09 10:12:01

标签: bash string

对于固定的前缀长度,我可以这样做:

[ a${filename:0:2} = a.# ] && echo temporary emacs file

如何为任意前缀执行此操作?

有更清洁的方式吗?

2 个答案:

答案 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个带括号的子表达式匹配的字符串部分。