#arrays #bash
#массивы #удар
Вопрос:
Я хочу объединить несколько файлов, которые я создаю при вызове функции, потому что я трижды вызываю функцию в Main
aa_file aa bb_file bb cc_file cc
Конечный результат
final_file aa bb cc function cal () { # Some operation while true; do read -p "would you like asignment ? on ${var} " yn case $yn in [Yy]* ) arr_var =("$var"); echo "$var" gt; $var_file; [Nn]* ) break;; * ) echo "Please answer yes or no.";; esac # Some operation done } # Main eval arr_var=() cal "aa" cal "bb" cal "cc"
Как создать функцию, которая может объединить все файлы
for i in "${arr_var[@]}" do cat $i_file $(i 1)_file gt; final_file done
потому что, когда я вызываю только два раза функцию cal, я хочу, чтобы
# Main eval arr_var=() cal "aa" cal "cc" final_file aa cc
Ответ №1:
Пожалуйста, исправьте свой вопрос, потому что трудно понять, чего вы хотите.
Однако вы можете вызвать функцию несколько раз и объединить ее выходные данные в другой файл. Подобный этому:
for f in `seq 1 5` do cat ${f} done gt; output_file
Или даже вот так:
( cal "aa" cal "bb" cal "cc" ) gt; output_file
В вашей версии функция final_file
перезаписывается на каждой итерации:
for i in "${arr_var[@]}" do cat $i_file $(i 1)_file gt; final_file done
Либо измените gt;
gt;gt;
, либо переместите за gt;
пределы цикла.
Ответ №2:
если вы используете bash, вы можете сделать:
arr_var=(aa bb cc) cat "${arr_var[@]/%/_file}" gt; final_file