首页 > 解决方案 > bash脚本中变量的正则表达式

问题描述

我试图从代表路径的变量中删除前缀。

目前这是我的代码:

for f in /Users/username/Documents/Dev/beneficiary-service/src/main/helm/*
do
  echo $f
  if [[ $f == 'values'* ]]
  then
      yq d -i $f 'resources.'
  fi
done

我打印了 $f 来查看它的输出。我希望它只是文件名,没有路径(values-stg.yaml)。但是,这是输出:

+ echo /Users/username/Documents/Dev/beneficiary-service/src/main/helm/values-stg.yaml
/Users/username/Documents/Dev/beneficiary-service/src/main/helm/values-stg.yaml
+ [[ /Users/username/Documents/Dev/beneficiary-service/src/main/helm/values-stg.yaml == \v\a\l\u\e\s* ]]

而且,“if”语句永远不会是真的,因为它认为 values* 是字面上的,而不是“任何以值开头的东西”

标签: bashsh

解决方案


路径扩展包括指定的整个路径。您可以使用参数扩展将其删除

[[ ${f##*/} == values* ]]

“如果”陈述永远不会是真的

这不是真的。values但是,不需要引用,因为没有一个字符是特殊的。


推荐阅读