GNU/Linux >> Linux Esercitazione >  >> Linux

Linux che divide l'array in variabili separate?

Ho programmato su MVS per anni e recentemente ho utilizzato Linux, quindi le mie competenze su Linux non sono ancora così grandi ma capisco bene i concetti di sviluppo.

Quello che sto cercando di fare è leggere una directory di file e prendere il nome di tutti i file con estensione .trg. Quindi, devo prendere quei nomi e archiviarli in variabili separate in modo da poterli utilizzare in seguito nel mio script per fare riferimento ai componenti e utilizzarli per la denominazione dei file. Ho ottenuto i nomi dei file usando il comando trova:

param=`find *${file_name}*.trg

Ciò ha prodotto la variabile $param caricata con i valori (ABC1099R ABC1099C) poiché sono due file nella directory denominata ABC1099R.trg e ABC1099C.trg. Ora devo assegnare quei valori a singole variabili in modo da poterli utilizzare in seguito nel mio script. Ho cercato in alto e in basso sul Web, ma ogni esempio che trovo utilizza l'eco solo per visualizzarli o stanno usando un ciclo do while e utilizzando i singoli valori all'interno del ciclo. Devo assegnarli alle proprie variabili in modo che siano disponibili per me più avanti nello script.

Inizialmente ho provato un ciclo for do come questo:

for trigger_files in $param; do
    app1=(basename "{trigger_files}" .trg).dat
done

Ma questo dà solo la prima occorrenza app1=ABC1099R

Devo salvare tutte le occorrenze nella propria variabile individuale. Potrebbero esserci potenzialmente 20 nomi di file, ma ho pensato che dovevo solo farlo funzionare con due, quindi sarebbe in grado di gestirne molti.

Risposta accettata:

Se stai usando bash, considera di farlo nel modo bash.

Il tuo array verrebbe così ottenuto (nessun find esterno comando):

params=( *${file_name}*.trg )

e quindi scorrere l'array in questo modo:

for file in "${params[@]}"; do
    echo "I'm happily reading the beautiful file $file"
done

Se vuoi rimuovere il .trg estensione e sostituirla con .banana :

for file in "${params[@]}"; do
    echo "My gorilla loves the file ${file%.trg}.banana"
done

Questo metodo, con le virgolette corrette, sarà sicuro al 100% per quanto riguarda i file con simboli divertenti nei loro nomi.

Osservazione. Usa sempre i globbing con shopt -s nullglob o shopt -s failglob .


Linux
  1. Come spostare un file in Linux

  2. Linux:tutto è un file?

  3. Leggi il file nell'array?

  4. Come posso convertire un'immagine disco Linux in un file sparse?

  5. Le modifiche ai file in Linux vengono salvate direttamente sul disco?

Comando Gunzip in Linux

Comando Stat in Linux

Cos'è umask in Linux?

Come scrivere dati in file in Linux

Come unire più righe in una in un file in Linux

Variabili d'ambiente Linux