GNU/Linux >> Tutoriels Linux >  >> Linux

Linux divise le tableau en variables séparées ?

Je programme sur MVS depuis des années et j'utilise Linux depuis peu donc mes compétences Linux ne sont pas encore très bonnes mais je comprends bien les concepts de développement.

Ce que j'essaie de faire, c'est de lire un répertoire de fichiers et de prendre le nom de tous les fichiers avec une extension .trg. Ensuite, je dois prendre ces noms et les stocker dans des variables distinctes afin de pouvoir les utiliser plus tard dans mon script pour faire référence aux composants et les utiliser pour nommer les fichiers. J'ai obtenu les noms de fichiers en utilisant la commande find :

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

Cela a produit la variable $param chargée avec les valeurs (ABC1099R ABC1099C) car il s'agit de deux fichiers dans le répertoire nommés ABC1099R.trg et ABC1099C.trg. Je dois maintenant attribuer ces valeurs à des variables individuelles afin de pouvoir les utiliser plus tard dans mon script. J'ai cherché haut et bas sur le Web, mais chaque exemple que je trouve utilise echo pour simplement les afficher ou ils utilisent une boucle do while et utilisent les valeurs individuelles dans la boucle. Je dois les affecter à leurs propres variables afin qu'elles soient disponibles plus tard dans le script.

Au départ, j'ai essayé une boucle for do comme celle-ci :

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

Mais cela ne donne que la première occurrence app1=ABC1099R

J'ai besoin que toutes les occurrences soient enregistrées dans leur propre variable individuelle. Il pourrait y avoir potentiellement 20 noms de fichiers, mais j'ai pensé que j'avais juste besoin de le faire fonctionner avec deux, donc il serait capable d'en gérer beaucoup.

Réponse acceptée :

Si vous utilisez bash, pensez à le faire de la manière bash.

Votre tableau serait ainsi obtenu (pas de find externe commande):

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

puis vous parcourez le tableau comme suit :

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

Si vous souhaitez supprimer le .trg extension et remplacez-la par .banana :

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

Cette méthode, avec des citations appropriées, sera 100 % sûre en ce qui concerne les fichiers avec des symboles amusants dans leurs noms.

Remarque. Utilisez toujours les globbings avec soit shopt -s nullglob ou shopt -s failglob .


Linux
  1. Comment déplacer un fichier sous Linux

  2. Linux - Tout est un fichier ?

  3. Lire le fichier dans le tableau ?

  4. Comment convertir une image disque Linux en un fichier sparse ?

  5. Les modifications de fichiers sous Linux sont-elles directement enregistrées sur le disque ?

Commande Gunzip sous Linux

Commande Stat sous Linux

Qu'est-ce qu'umask sous Linux ?

Comment écrire des données dans un fichier sous Linux

Comment joindre plusieurs lignes en une seule dans un fichier sous Linux

Variables d'environnement Linux