Bash проверить, существует ли регулярное выражение для файла и назначить имя файла переменной - PullRequest
0 голосов
/ 23 апреля 2019

Я ищу быстрый, короткий и портативный способ проверить, существует ли файл, соответствующий регулярному выражению (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 Ответ

3 голосов
/ 23 апреля 2019

Вставьте его в переменную:

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

или сопоставлять файлы напрямую, используя extglob bash:

shopt -s nullglob
for file in @(env?(ironment)|requirements).y?(a)ml
do
  echo "Found $file"
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...