bash脚本中变量上的正则表达式

bash脚本中变量上的正则表达式,bash,sh,Bash,Sh,我试图从表示路径的变量中删除前缀 目前这是我的代码: 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以查看其输出。我希望它只是文件名,没有路径(值stg.yaml)。 但是,这是输出: + echo /Use

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

目前这是我的代码:

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以查看其输出。我希望它只是文件名,没有路径(值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”语句永远不会为真,因为它将值*按原样考虑,而不是“以值开头的任何内容”

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

[[ ${f##*/} == values* ]]
“如果”的说法永远不会是真的


那不是真的。不过,不需要引用
,因为没有任何字符是特殊的。

使用Basename-下面的演示-指定Basename“${f}”的输出(如果文件名中有空格)


使用参数展开删除路径:
[${f##*/}==values*]
。谢谢!作品perfectly@Dominique请看一看我的新线程:我把这个带到docker并得到一些更改,请看一看我的新线程:请看一看我的新线程:
for f in /Users/username/Documents/Dev/beneficiary-service/src/main/helm/*
do
  echo $f
  bf=$(basename "${f}") ; echo ${bf}
  if [[ ${bf} == 'values'* ]]
  then
      echo yq d -i ${bf} 'resources.'
  fi
done