Расширенная подстановка внутри скрипта — что я делаю не так?

Расширенная подстановка внутри скрипта — что я делаю не так?

поэтому я пытаюсь выбрать диапазон файлов с помощью интерактивного скрипта.

Конечной целью является использование readкоманды, но для демонстрации я назначил globпеременную вручную .

#!/bin/bash
shopt -s extglob
# read -rp "Please enter a globbing string:"$'\n' glob

# This will give me an error (See below)
glob=*2020_04_03_{06..18}.jpg
/bin/ls -la /mnt/drive1/images/*/*/${glob}

# While this will return the desired files
/bin/ls -la /mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg

Ошибка следующая:

Error /bin/ls: cannot access "/mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg": No such file or directory

Так что же я упускаю здесь при назначении globпеременной или добавлении globпеременной к моему пути?

Решение:

Я нашел решение, но не совсем уверен, почему.

bash <<EOF
/bin/ls -la /mnt/drive1/images/*/*/${glob} 
EOF

даст мне желаемый результат.

решение1

Вместо простой переменной можно использовать массив.

shopt -s nullglob  ##: just in case there is non match for the glob.

glob=(*2020_04_03_{06..18}.jpg) ##: This will expand the glob * and brace expansion.

/bin/ls -la /mnt/drive1/images/*/*/"${glob[@]}"
  • Это должно сработать для вашего примера кода.

  • Проблема возникнет, когда вы решите заменить числа внутри раскрытия фигурных скобок переменной, о которой упоминал @kusalananda, говоря о последовательности раскрытия.

  • Добавьте failglobопцию shell, если вы хотите увидеть ошибку и выйти с ненулевым значением, если нет ни одного соответствующего шаблону.

Связанный контент