Her evalzaman 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, bashbu tür şeyleri başarmanın daha düzenli yollarına izin veren kabuklar da vardır . Ancak her durumda, bu kullanımı evalgüvenlidir çünkü argümanlarının tümü parametre genişletmesi içermeyen sabit dizelerdir.