webentwicklung-frage-antwort-db.com.de

bash: fügt List-Dateien in eine Variable ein, aber die Größe des Arrays ist 1

Ich liste die Dateien in einem Verzeichnis auf und durchläuft sie in Ordnung, ABER ich muss wissen, wie viele es auch gibt. $ {# dirlist [@]} ist immer 1, aber für Schleifen funktioniert das?

#!/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

Ich habe Dateien xxx001.text bis xxx013.text
aber alles was ich bekomme ist 001/1 002/1 003/1

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

macht kein Array, sondern nur einen String mit durch Leerzeichen getrennten Dateinamen.

du musst

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

um es zu einem Array zu machen.

Dann verweist $ dirlist nur auf das erste Element, das Sie verwenden müssen

${dirlist[*]}

alle in der Schleife referenzieren.

23
KarelSk

Sie erstellen ein Array nur, wenn Sie es mit () umgeben:

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

durchlaufen Sie das Array mit einem Zähler

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


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