He estado programando en MVS durante años y recientemente he estado usando Linux, por lo que mis habilidades con Linux aún no son tan buenas, pero entiendo bien los conceptos de desarrollo.
Lo que intento hacer es leer un directorio de archivos y tomar el nombre de todos los archivos con una extensión de .trg. Luego, necesito tomar esos nombres y almacenarlos en variables separadas para poder usarlos más adelante en mi script para referirme a los componentes y usarlos para nombrar archivos. Obtuve los nombres de archivo usando el comando find:
param=`find *${file_name}*.trg
Esto produjo la variable $ param cargada con los valores (ABC1099R ABC1099C) ya que son dos archivos en el directorio llamado ABC1099R.trg y ABC1099C.trg. Ahora necesito asignar esos valores a variables individuales para poder usarlos más adelante en mi script. He buscado arriba y abajo en la web, pero cada ejemplo que encuentro está usando echo para mostrarlos o están usando un bucle do while y los valores individuales dentro del bucle. Necesito tenerlos asignados a sus propias variables para que estén disponibles para mí más adelante en el script.
Inicialmente probé un bucle for do como este:
for trigger_files in $param; do
app1=(basename "{trigger_files}" .trg).dat
done
Pero eso solo da la primera aparición app1 = ABC1099R
Necesito tener todas las ocurrencias guardadas en su propia variable individual. Podría haber potencialmente 20 nombres de archivo, pero pensé que solo necesitaba que funcionara con dos, por lo tanto, sería capaz de manejar muchos.
Respuestas:
Si está usando bash , considere hacerlo de la manera bash.
Su matriz se obtendría así (sin
find
comando externo ):y luego recorres la matriz de esta manera:
Si desea eliminar la
.trg
extensión y reemplazarla con.banana
:Este método, con una cita adecuada, será 100% seguro con respecto al archivo con símbolos divertidos en sus nombres.
Observación. Siempre use globbings con cualquiera
shopt -s nullglob
oshopt -s failglob
.fuente
Puede declarar param como una matriz en lugar de como una cadena:
Ahora puede acceder a los valores individuales utilizando un índice como si fueran variables individuales. Por ejemplo:
se imprimirá
ABC1099C.trg
(el segundo elemento en la matriz. El índice comienza con 0).Si desea deshacerse de la extensión de archivo, puede intentar
${param[1]%.*}
Para obtener más información sobre las matrices, eche un vistazo aquí:
fuente