Bash检查文件匹配的正则表达式是否存在并将文件名分配给变量

时间:2019-04-23 20:29:55

标签: regex bash

我正在寻找一种快速,简短和可移植的方法来检查当前工作目录中是否存在与正则表达式(env(ironment)?|requirements).ya?ml相匹配的文件,如果是,则将其基名分配给变量$FILE处理。

基本上,我想结合使用手柄

for FILE in environment.yml env.yml requirements.yml environment.yaml env.yaml requirements.yaml; do
  if [ -e $FILE ]; then
    ...
  fi
done

使用正则表达式,如

if test -n "$(find -E . -maxdepth 1 -regex '.*(env(ironment)?|requirements).ya?ml' -print -quit)"
then
  ...
fi

1 个答案:

答案 0 :(得分:3)

将其粘贴到变量中:

file="$(find -E . -maxdepth 1 -regex '.*(env(ironment)?|requirements).ya?ml' -print -quit)"

if [ -n "$file" ]
then
  echo "I found $file"
else
  echo "No such file."
fi

或者,您可以使用大括号扩展来保持循环并缩短循环:

for file in {env{,ironment},requirements}.{yml,yaml} 
do
  if [ -e "$file" ]
  then
    echo "Found $file"
  else
    echo "There is no $file"
  fi
done

或直接使用bash的extglob匹配文件:

shopt -s nullglob
for file in @(env?(ironment)|requirements).y?(a)ml
do
  echo "Found $file"
done