2017-11-18 2 views
4

ich die Dateien des aktuellen Verzeichnisses in einem Array setzen will und Echo jede Datei mit diesem Skript:Bash for-Schleife über Array mit Dateien aus (*) zeigt nur die erste Element

#!/bin/bash 

files=(*) 

for file in $files 
do 
    echo $file 
done 

# This demonstrates that the array in fact has the values from (*) 
echo ${files[0]} ${files[1]} 

echo done 

Der Ausgang:

Weiß jemand, warum nur das erste Element in der for-Schleife gedruckt wird?

Antwort

8

$files expandiert zum ersten Element des Arrays. Versuchen Sie echo $files, es wird nur das erste Element des Arrays gedruckt. Die for-Schleife druckt aus demselben Grund nur ein Element.

Um alle Elemente des Arrays zu erweitern, müssen Sie als ${files[@]} schreiben.

Die richtige Art und Weise Elemente eines Bash-Array iterieren:

for file in "${files[@]}" 
+1

Beachten Sie, dass die doppelten Anführungszeichen sollte auch ein notwendiger Bestandteil dieses Idiom betrachtet werden; Ohne sie können Sie seltsame Effekte von einigen Zeichen in den Array-Elementen (Leerzeichen, Platzhalter usw.) erhalten. –

Verwandte Themen