#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