Herhangi bir topak olup olmadığını Test bash maçlar
Eğer tek bir dosya varlığı için kontrol etmek isterseniz, test -e filename
[ -e filename ]
kullanarak test edebilirsiniz.
Bir topak var diyelim ve topak eşleşen herhangi bir dosyanın var olup olmadığını bilmek istiyorum. Bu kısım 1 veya daha fazla dosya, bu durumda bir şeyler yapmak istiyorum () eşleştirebilirsiniz 0 dosyaları bu durumda bir şey yapmak istiyorum (), ya da maç olabilir. Nasıl bir topak maçlar vardır herhangi bir olup olmadığını test edebilirim? (Çok var maçlar nasıl olduğu umurumda değil, ve eğer if
deyim ve döngüler sadece en okunabilir buluyorum, çünkü bu yapabileceğim en iyisi olacaktır.
(test -e glob*
eğer kısım birden fazla dosya eşleşirse başarısız olur.)
CEVAP
Nullglob kabuk seçeneği gerçekten bir bashism.
Sıkıcı bir kaydetmek için ihtiyaç önlemek ve nullglob devletin geri yüklemek için, sadece bu kısım ... ... genişleyen kabuk içinde bırakacağım:
if test -n "$(shopt -s nullglob; echo glob*)"
then
echo found
else
echo not found
fi
Daha iyi taşınabilirlik için ve daha esnek bir genelleme kullanın
if test -n "$(find . -maxdepth 1 -name 'glob*' -print -quit)"
then
echo found
else
echo not found
fi
Açık-baskı -çıkıneylemler için kullanılırbulabilirsinizyerine varsayılan örtülü-yazdırıneylembulabilirsinizilk dosya arama kriterleri eşleşen bulur bulmaz çıkılacak. Burada bir sürü dosya maçı, bu çalıştıracağını çok daha hızlı echo glob*
ls glob*
da önler olasılığı overstuffing genişletilmiş komut satırı (kabuk var 4K uzunluğu sınırı).
Eğerbulabilirsinizoverkill gibi hissediyor ve dosyaları eşleştirmek için olası sayısı küçük, stat
if stat -t glob* >/dev/null 2>&1
then
echo found
else
echo not found
fi
Nasıl dize Bash kabuğu ile dosyasında ...
BASH: dize bir tamsayı olarak geçerli ...
Nasıl bir dize bash kabuk tanımlı olup...
Eğer herhangi bir ata sınıf jQuery kul...
Eğer süreç numarası (PID) olup olmadığ...