कुछ अन्य उत्तरों को जोड़ और स्पष्टीकरण प्रदान करने के लिए, यदि आप ( exec
या ) के लिए बल्क विकल्प का उपयोग कर रहे हैं , और सभी स्थिति संबंधी तर्कों को पुनः प्राप्त करना चाहते हैं, तो आपको इसके साथ निपटने पर विचार करने की आवश्यकता है । और अधिक संक्षेप में, नीचे दिए गए आदेश पर विचार करें, जो कि ऊपर दिए गए सुझाव के अनुसार उपयोग करता है, और बस प्रत्येक निर्देशिका से '.wav' के साथ समाप्त होने वाले फ़ाइल पथों को गूँजता है:execdir
-exec command {} +
$0
bash -c
bash -c
find "$1" -name '*.wav' -execdir bash -c 'echo $@' _ {} +
बैश मैनुअल कहते हैं:
If the -c option is present, then commands are read from the first non-option argument command_string. If there are arguments after the command_string, they are assigned to the
positional parameters, starting with $0.
यहाँ, 'check $@'
कमांड स्ट्रिंग है, और _ {}
कमांड स्ट्रिंग के बाद तर्क हैं। ध्यान दें कि $@
बैश में एक विशेष स्थितीय पैरामीटर है जो 1 से शुरू होने वाले सभी स्थितीय मापदंडों तक फैलता है । यह भी ध्यान दें कि -c
विकल्प के साथ , पहला तर्क स्थितीय पैरामीटर को सौंपा गया है $0
। इसका मतलब यह है कि यदि आप सभी स्थितिगत मापदंडों का उपयोग करने की कोशिश करते हैं $@
, तो आपको केवल शुरू $1
और ऊपर के पैरामीटर मिलेंगे । यही कारण है कि डोमिनिक के उत्तर में _
पैरामीटर भरने के लिए एक डमी तर्क है $0
, इसलिए हम चाहते हैं कि सभी तर्क बाद में उपलब्ध हों यदि हम $@
उदाहरण के लिए पैरामीटर विस्तार का उपयोग करते हैं , या उस उत्तर में लूप के लिए।
बेशक, स्वीकृत उत्तर के समान, bash -c 'shell_function $0 $@'
यह भी स्पष्ट रूप से गुजरने से काम करेगा $0
, लेकिन फिर, आपको यह ध्यान रखना $@
होगा कि अपेक्षा के अनुरूप काम नहीं होगा।
$0
।