GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux Array in separate Variablen aufteilen?

Ich programmiere seit Jahren auf MVS und benutze seit kurzem Linux, daher sind meine Linux-Kenntnisse noch nicht so gut, aber ich verstehe Entwicklungskonzepte gut.

Was ich versuche, ist, ein Dateiverzeichnis zu lesen und den Namen aller Dateien mit der Erweiterung .trg zu nehmen. Dann muss ich diese Namen nehmen und sie in separaten Variablen speichern, damit ich sie später in meinem Skript verwenden kann, um auf Komponenten zu verweisen und sie für die Dateibenennung zu verwenden. Ich habe die Dateinamen mit dem Find-Befehl erhalten:

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

Dadurch wurde die $param-Variable mit den Werten (ABC1099R ABC1099C) geladen, da es sich um zwei Dateien im Verzeichnis namens ABC1099R.trg und ABC1099C.trg handelt. Ich muss diese Werte jetzt einzelnen Variablen zuweisen, damit ich sie später in meinem Skript verwenden kann. Ich habe im Web hoch und niedrig gesucht, aber jedes Beispiel, das ich finde, verwendet Echo, um sie nur anzuzeigen, oder sie verwenden eine Do-While-Schleife und verwenden die einzelnen Werte innerhalb der Schleife. Ich muss sie ihren eigenen Variablen zuweisen, damit sie mir später im Skript zur Verfügung stehen.

Anfangs habe ich eine For-Do-Schleife wie diese ausprobiert:

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

Aber das gibt nur das erste Vorkommen app1=ABC1099R

Ich muss alle Vorkommen in ihrer eigenen individuellen Variablen speichern lassen. Es könnte potenziell 20 Dateinamen geben, aber ich dachte, ich müsste es nur mit zwei zum Laufen bringen, daher würde es in der Lage sein, mit vielen umzugehen.

Akzeptierte Antwort:

Wenn Sie Bash verwenden, ziehen Sie bitte in Erwägung, es auf Bash-Weise zu tun.

Ihr Array würde so erhalten (kein externes find Befehl):

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

und dann durchlaufen Sie das Array wie folgt:

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

Wenn Sie die .trg entfernen möchten Erweiterung und ersetzen Sie sie durch .banana :

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

Diese Methode ist bei richtiger Anführung zu 100 % sicher in Bezug auf Dateien mit lustigen Symbolen im Namen.

Bemerkung. Verwenden Sie Globbings immer entweder mit shopt -s nullglob oder shopt -s failglob .


Linux
  1. So verschieben Sie eine Datei unter Linux

  2. Linux – Alles ist eine Datei?

  3. Datei in Array einlesen?

  4. Wie konvertiere ich ein Linux-Festplatten-Image in eine Sparse-Datei?

  5. Werden Dateibearbeitungen in Linux direkt auf der Festplatte gespeichert?

Gunzip-Befehl unter Linux

Stat-Befehl unter Linux

Was ist umask unter Linux?

So schreiben Sie Daten in eine Datei unter Linux

So verbinden Sie mehrere Zeilen in einer Datei in Linux zu einer

Linux-Umgebungsvariablen