Bash并在变量中替换整个字符串?

Jam*_*own 1 regex variables bash replace

我试图使用Bash替换来替换变量中的整个字符串,如果它匹配模式.例如:

pattern="ABCD"

${var/pattern/}
Run Code Online (Sandbox Code Playgroud)

删除(有没有替换)的第一次出现$pattern$var

${var#pattern}
Run Code Online (Sandbox Code Playgroud)

$pattern在开头删除$var

但是,我怎么能删除正则表达式模式"^ABCD$"$var?我可以:

if [ $var == "ABCD" ] ; then 
  echo "This is a match." # or whatever replacement
fi
Run Code Online (Sandbox Code Playgroud)

但这正是我正在寻找的.

fed*_*qui 5

您可以进行正则表达式检查:

pattern="^ABCD$"
[[ "$var" =~ $pattern ]] && var=""
Run Code Online (Sandbox Code Playgroud)

它检查中$var定义的正则表达式$pattern.如果匹配,则执行命令var="".

测试

$ pattern="^ABCD$"
$ var="ABCD"
$ [[ "$var" =~ $pattern ]] && echo "yes"
yes
$ var="1ABCD"
$ [[ "$var" =~ $pattern ]] && echo "yes"
$ 
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅检查字符串是否与BASH Shell脚本中的正则表达式匹配.