हालांकि यह सच है कि eval
हमेशा सावधानी के साथ संपर्क करने की आवश्यकता होती है, eval echo
निर्माण हमेशा व्यर्थ नहीं होता है और इसे सुरक्षित रूप से उपयोग किया जा सकता है। मुझे हाल ही में इसकी आवश्यकता थी कि कई ब्रेस एक्सपेंशन का मूल्यांकन उस क्रम में किया जाए जिसकी मुझे जरूरत थी।
bash
बाएं से दाएं कई ब्रेस एक्सपेंशन करता है, इसलिए
xargs -I_ cat _/{11..15}/{8..5}.jpg
तक फैलता है
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
लेकिन मुझे दूसरे ब्रेस विस्तार की आवश्यकता थी, जो पहले किया गया था, उपज
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
सबसे अच्छा मैं ऐसा करने के लिए आ सकता था
xargs -I_ cat $(eval echo _/'{11..15}'/{8..5}.jpg)
यह काम करता है क्योंकि एकल उद्धरण eval
कमांड लाइन के पार्सिंग के दौरान ब्रेसिज़ के पहले सेट को विस्तार से बचाते हैं , जिससे उन्हें उपविभाजित द्वारा विस्तारित किया जा सकता है eval
।
नेस्टेड ब्रेस विस्तार से जुड़ी कुछ चालाक योजना हो सकती है जो इसे एक चरण में करने की अनुमति देती है, लेकिन अगर मैं वहां हूं तो यह देखने के लिए बहुत पुराना और बेवकूफ है। इसके अलावा अन्य गोले भी हैं bash
जो इस तरह की चीज़ों को प्राप्त करने के कठिन तरीकों की अनुमति देते हैं। लेकिन किसी भी मामले में, यह उपयोग eval
सुरक्षित है क्योंकि इसके तर्क सभी निश्चित तार हैं जिनमें कोई पैरामीटर विस्तार नहीं है।