Я использую следующий код, чтобы настроить переменную, содержащую ряд разных имен файлов, после чего я потом буду выполнять некоторые функции. Используемые файлы находятся в другом каталоге (DIRECTORY
) в каталоге, где выполняется код (CURRENT_DIRECTORY
). Я подумал, что следующий код можно использовать для изменения в каталоге, содержащем файлы cd $DIRECTORY
, сохранить список файлов в переменной $FILES
, а затем вернуться в исходный каталог (cd $CURRENT_DIRECTORY
), где остальная часть кода может быть выполнена. Однако, если я выполняю две команды эха, первый содержит список файлов, когда я вхожу в каталог, где хранятся файлы, но вторая команда эха просто печатает 'vclist_2d_*.txt'
, т. Е. Интерпретирует это как строку, а не список файлов (по-видимому, потому, что я вернулся к исходному каталогу и поэтому не может найти файлы, которые соответствуют vclist_2d_*.txt
). Почему это происходит, и как я могу обойти эту проблему (без запуска всего в одном каталоге)?Установка переменных оболочки для хранения списков файлов
#!/bin/bash
CURRENT_DIRECTORY=`pwd`
DIRECTORY=/home/Documents/NewDirectory/
cd $DIRECTORY
pwd
FILES=vclist_2d_*.txt
echo $FILES
cd $CURRENT_DIRECTORY
echo $FILES
Я собирался опубликовать ответ с 'FILES = $ (echo ...)', но мне больше нравится решение для вашего массива. – Barmar
Не могли бы вы объяснить, почему нужен синтаксис 'echo '$ {FILES [@]}"? – 218
Это расширение всех элементов в массиве. Как '' $ @ "', но для массива. К сожалению, я не вижу хороших краткий раздел в bashref об этом (что странно). –