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
.