поэтому я пытаюсь выбрать диапазон файлов с помощью интерактивного скрипта.
Конечной целью является использование 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, если вы хотите увидеть ошибку и выйти с ненулевым значением, если нет ни одного соответствующего шаблону.