`खोज` के अंदर काम का प्रतिस्थापन क्यों नहीं होता?


2

बाश में, यदि विकल्प के basenameभीतर फ़ंक्शन को चलाने का प्रयास करें, तो यह कुछ भी करने के लिए प्रतीत नहीं होता है। उदहारण के लिए:-execfind

find . -name "*pdf" -exec  echo $(basename {}) \;

निर्देशिका सहित फ़ाइल नाम देता है, अर्थात, के परिणाम के रूप में ही

find . -name "*pdf" -exec  echo {} \;

ऐसा क्यों होता है?

जवाबों:


3

$(basename {})टुकड़ा अपने खोल से पहले से पार्स किया गया है findनिष्पादित किया जाता है। परिणाम है {}। इसीलिए दोनों आज्ञाएँ समान हैं।

यह काम करने के लिए जैसा कि आप चाहते थे कि आप एक और शेल खोल सकते हैं जो $()अपने आप संभाल लेगा । साथ का हवाला देते हुए ''रोकता है प्रसंस्करण से बाहरी कवच $():

find -name "*pdf" -exec sh -c 'echo $(basename "$1")' sh {} \;

नोट: इस उत्तर का पहला संस्करण इस्तेमाल किया गया sh -c 'echo $(basename {})'। यह गलत है, इस अन्य उत्तर को देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.