【问题标题】:regex on variable in bash script [duplicate]bash脚本中变量的正则表达式[重复]
【发布时间】:2021-04-13 09:06:32
【问题描述】:

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

目前这是我的代码:

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* 字面意思是原样,而不是“任何以值开头的东西”

【问题讨论】:

标签: bash sh


【解决方案1】:

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

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

“如果”语句永远不会为真

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

【讨论】:

【解决方案2】:

使用 Basename - 下面的演示 - 分配 basename "${f}" 的输出(如果文件名中有空格)

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 2013-06-06
  • 1970-01-01
  • 2017-11-04
相关资源
最近更新 更多