Как получить глобальную переменную, которая была прочитана из списка с именами файлов в bash?

#bash #shell #scripting #scripting-language

#bash #оболочка #сценарии #язык сценариев

Вопрос:

У меня есть один текстовый файл, в котором есть множество имен классов.

Я хотел бы прочитать эти имена классов построчно в скрипте bash и присвоить это значение переменной, чтобы использовать ее глобально в другой команде в скрипте.

 FILES="files.txt"

for f in $FILES
do
  echo "Processing $f file..."
  # take action on each file. $f store current file name
  cat $f
done
  

Ответ №1:

Я предполагаю, files.txt что это список файлов классов, по одному классу в строке?

 while read class
do : whatver you need with $class
done < files.txt
  

Если у вас более одного файла классов, используйте массив.
Не делайте все это заглавными буквами.

 file_list=( files.txt other.txt ) # put several as needed
for f in "${file_list[@]}" # use proper quoting
do : processing $f # set -x for these to log to stderr
   while read class
   do : whatver you need with $class
   done < "$f"
done
  

Комментарии:

1. Привет, спасибо за ответ, поэтому, когда я добавляю дополнительную команду с потребностью в переменной атрибута $ class, я должен просто использовать ее в части «делать», правильно? Я не могу использовать после завершения?

2. Значение $class переменной не будет сохраняться после цикла, но вы можете установить foo=$class внутри цикла и $foo все равно останется после.

Ответ №2:

Предполагая, что каждая строка в ваших файлах содержит только имя класса, это должно сработать :

 for f in $FILES
do
  echo "Processing $f file..."
  while read class
  do 
    <something with "$class" >
  done < $f
done
  

Комментарии:

1. У меня есть один файл, который содержит несколько путей к файлам.. Я думаю, что это не работает для меня.

Ответ №3:

Пример 1

 FILES="files.txt" 
cat $FILES | while read class
do
   echo $class  # Do something with $class
done
  

Пример 2, прокомментированный Полом Ходжесом

 FILES="files.txt"
while read class
do
   echo $class  # Do something with $class
done < $FILES
  

Комментарии:

1. У меня есть один файл, который содержит несколько путей к файлам.. Я думаю, что у меня это не работает @PaulHodges