Bash объединяет определенный файл, когда я вызываю функцию

#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