Sorun olan öğelere nasıl eriştiğiniz konusunda başkalarına katılıyorum. Dizi atamasında dosya adlarından alıntı yapmak doğrudur:
FILES=(
"2011-09-04 21.43.02.jpg"
"2011-09-05 10.23.14.jpg"
"2011-09-09 12.31.16.jpg"
"2011-09-11 08.43.12.jpg"
)
for f in "${FILES[@]}"
do
echo "$f"
done
Formun herhangi bir dizisinin etrafında çift tırnak işareti kullanmak "${FILES[@]}"
, diziyi dizi öğesi başına bir kelimeye böler. Bunun ötesinde herhangi bir kelime ayırma yapmaz.
Kullanmanın "${FILES[*]}"
da özel bir anlamı vardır, ancak dizi elemanlarını $ IFS'nin ilk karakteriyle birleştirerek tek bir kelime ile sonuçlanır , ki bu muhtemelen istediğiniz şey değildir.
Çıplak ${array[@]}
veya ${array[*]}
konu bu genişlemenin sonucunu daha fazla kelime bölmeye tabi tutar, bu nedenle $IFS
dizi öğesi başına bir kelime yerine boşluklara (ve içindeki herhangi bir şeye ) bölünmüş kelimelerle sonuçlanırsınız.
C tarzı bir döngü kullanmak da iyidir ve net değilseniz kelime bölme konusunda endişelenmenizi önler:
for (( i = 0; i < ${#FILES[@]}; i++ ))
do
echo "${FILES[$i]}"
done
FILES[0] = ...
? (Düzenleme: Yeni yaptım; işe yaramıyor. İlginç).