Her eval
zaman dikkatli bir şekilde yaklaşılması gerektiği doğru olsa da,eval echo
inşaat hep anlamsız değildir ve olabilir güvenle kullanılabilir. Son zamanlarda onlara ihtiyacım olan sırayla değerlendirilen birden fazla küme ayracı genişletme almak için ona ihtiyaç vardı.
bash
soldan sağa birden çok ayraç genişletmesi yapar,
xargs -I_ cat _/{11..15}/{8..5}.jpg
genişler
xargs -I_ cat _/11/8.jpg _/11/7.jpg _/11/6.jpg _/11/5.jpg _/12/8.jpg _/12/7.jpg _/12/6.jpg _/12/5.jpg _/13/8.jpg _/13/7.jpg _/13/6.jpg _/13/5.jpg _/14/8.jpg _/14/7.jpg _/14/6.jpg _/14/5.jpg _/15/8.jpg _/15/7.jpg _/15/6.jpg _/15/5.jpg
ama önce ikinci brace genişlemesine ihtiyacım vardı,
xargs -I_ cat _/11/8.jpg _/12/8.jpg _/13/8.jpg _/14/8.jpg _/15/8.jpg _/11/7.jpg _/12/7.jpg _/13/7.jpg _/14/7.jpg _/15/7.jpg _/11/6.jpg _/12/6.jpg _/13/6.jpg _/14/6.jpg _/15/6.jpg _/11/5.jpg _/12/5.jpg _/13/5.jpg _/14/5.jpg _/15/5.jpg
Bunu yapabileceğim en iyi şey
xargs -I_ cat $(eval echo _/'{11..15}'/{8..5}.jpg)
Bu işe yarar çünkü tek tırnaklar ilk parantez kümesini, eval
komut satırının işleminden çağrılan alt kabuk tarafından genişletilmesini sağlar eval
.
Bunun bir adımda gerçekleşmesine izin veren iç içe geçmiş ayraç genişletmelerini içeren bazı kurnaz şema olabilir, ancak varsa çok görmek için aptalım. Ayrıca, bash
bu tür şeyleri başarmanın daha düzenli yollarına izin veren kabuklar da vardır . Ancak her durumda, bu kullanımı eval
güvenlidir çünkü argümanlarının tümü parametre genişletmesi içermeyen sabit dizelerdir.