Bunun basit olacağını düşünmüştüm - ama beklediğimden daha karmaşık.
Bir dizindeki belirli bir türdeki tüm dosyaları yinelemek istiyorum, bu yüzden şunu yazarım:
#!/bin/bash
for fname in *.zip ; do
echo current file is ${fname}
done
Bu , dizinde en az bir eşleşen dosya olduğu sürece çalışır . Ancak eşleşen dosya yoksa, şunu alıyorum:
current file is *.zip
Sonra denedim:
#!/bin/bash
FILES=`ls *.zip`
for fname in "${FILES}" ; do
echo current file is ${fname}
done
Döngü gövdesi dosya olmadığında çalışmaz, ancak ls'den hata alıyorum:
ls: *.zip: No such file or directory
Eşleşen dosyaları temiz bir şekilde işleyen bir döngü nasıl yazarım?
FILES= ls * .zip ; for fname in "${FILES}"...fakat beklendiği gibi çalışırfor fname in *.zip ; do....
for file in *.zip, kullan`ls ...` . @ cuonglm'in önerisi, *.zipkalıp herhangi bir dosyayla eşleşmediğinde hiçbir şeye genişlememesidir. lsargümanlar olmadan geçerli dizini listeler.
ls: genellikle kaçınılması gereken bir neden değil ayrıştırmak ls? ; Ayrıca bu sayfanın üst kısmının yakınındaki BashGuide'un ParsingLs makalesine bakınız.
shopt -s nullglobFor döngüsünü çalıştırmadan önce ekleyin .