web-dev-qa-db-fra.com

bash: met les fichiers de liste dans une variable et la taille d'un tableau est égale à 1

J'énumère les fichiers d'un répertoire et les parcoure en boucle, MAIS j'ai besoin de savoir combien il y en a aussi. $ {# dirlist [@]} est toujours 1, mais pour les boucles fonctionne?

#!/bin/bash
prefix="xxx"; # as example

len=${#prefix}; # string length
dirlist=`ls ${prefix}*.text`;
qty=${#dirlist[@]};  # sizeof array is always 1
for filelist in $dirlist
do
    substring="${filelist:$len:-5}";
    echo "${substring}/${qty}";
done

J'ai des fichiers xxx001.text jusqu'à xxx013.text
mais tout ce que je reçois est 001/1 002/1 003/1

10
Waygood
dirlist=`ls ${prefix}*.text`

ne crée pas de tableau, il crée uniquement une chaîne avec des noms de fichiers séparés par des espaces.

tu dois faire

dirlist=(`ls ${prefix}*.text`)

pour en faire un tableau.

Ensuite, $ dirlist ne référencera que le premier élément, vous devez utiliser

${dirlist[*]}

pour tous les référencer dans la boucle.

23
KarelSk

Vous ne créez pas de tableau sauf si vous l'entourez de ():

dirlist=(`ls ${prefix}*.text`)
3
Costi Ciudatu
dir=/tmp
file_count=`ls -B "$dir" | wc -l`
echo File count: $file_count
2
arr=(~/myDir/*)

parcourir un tableau à l'aide d'un compteur

for ((i=0; i<${#arr[@]}; i++)); do
#do something to each element of array


 echo "${arr[$i]}"
done
1
dilshad