क्या किसी अज्ञात फ़ंक्शन के समान कुछ बनाना संभव है जिसका मूल्य किसी सरणी तत्व को असाइन किया जा सकता है और बाद में कहा जाता है? मुझे बैश स्क्रिप्ट में ऐसा करने का कोई तरीका नहीं दिख रहा है लेकिन शायद एक कामकाज है।शैल स्क्रिप्ट्स में बेनामी फ़ंक्शन
उत्तर
लघु जवाब: नहीं
लांग जवाब: Nooooooooooooo।
पूरा उत्तर: बैश में कार्य प्रथम श्रेणी की वस्तुएं नहीं हैं, इसलिए बैश में अज्ञात फ़ंक्शन जैसी कोई चीज़ नहीं हो सकती है।
आम तकनीक सशर्त समारोह परिभाषाओं आवंटित करने के लिए है:
#!/bin/sh case $1 in a) foo() { echo case a; };; b) foo() { echo case b; };; *) foo() { echo default; } ;; esac foo
तुम सच में काम करता है स्टोर करने के लिए सरणी की जरूरत है, तो आप नामित कार्यों को परिभाषित और सिर्फ उनके नाम स्टोर कर सकते हैं। फिर आप फ़ंक्शन को ${array[n]}
के रूप में कॉल कर सकते हैं। या, आप उन्हें func1
.. funcN
नाम कर सकते हैं और फिर बस func$n
कहते हैं।
यह संभव है; मैंने वास्तव में ऐसा करने के लिए एक पुस्तकालय लिखा, हालांकि यह एक बहुत ही अजीब परियोजना है। स्रोत कोड http://github.com/spencertipping/bash-lambda पर उपलब्ध है। इस पुस्तकालय का उपयोग करना:
$ my_array=()
$ my_array[0]=$(fn x 'echo $((x + 1))')
$ my_array[1]=$(fn x 'echo $((x + 2))')
$ ${my_array[0]} 5
6
$ ${my_array[1]} 5
7
$
चाल fn
समारोह समारोह, chmod +x
कि फाइल के शरीर वाली फ़ाइल बनाने, फिर उसके नाम वापसी है। इससे भटकने वाली फाइलें जमा हो जाती हैं, यही कारण है कि लाइब्रेरी एक असीमित चिह्न/स्वीप कचरा कलेक्टर भी लागू करती है।
वहाँ गुमनाम समारोह निष्पादित करने से पहले क्रियान्वित परिष्करण के लिए एक आदेश के लिए प्रतीक्षा करने के लिए एक रास्ता है? – William
अपने PATH
#!/bin/sh
printusage() {
printf "Create anonymous function, for example\n"
printf "fn 'echo "$1 $2"'"
exit 1
}
[ "$#" = "1" ] || printusage
fun=$1
[ "$fun" = "" ] && printusage
fun_file="$(mktemp /tmp/fun_XXXXXX)"
echo "#!/bin/sh" > "$fun_file"
echo "" >> "$fun_file"
echo "$fun" >> "$fun_file"
chmod u+x "$fun_file"
echo "$fun_file"
में fn फ़ाइल बनाएँ इसके बाद आप कर सकते हैं:
foo=$(fn 'echo $1')
${foo} "bar"
अच्छी तरह से पार्टी ट्यूरिंग पूरा हो गया है, सू पूरी तरह से संभव thats;)
लेकिन एक तरफ इस से यह वास्तव में विचार के लायक नहीं है।
आप इस रेखा के साथ कुछ के साथ इस तरह के व्यवहार हालांकि अनुकरण कर सकते हैं:
echo myval ; (foocmd "$_" && barcmd "$_")
लेकिन क्यों?!?
- 1. वर्चुअलएन्वार्पर फ़ंक्शन शैल स्क्रिप्ट्स में अनुपलब्ध
- 2. शैल स्क्रिप्ट्स में टेस्ट कुछ भी प्रोटोकॉल
- 3. बेनामी बनाम गैर बेनामी फ़ंक्शन लुआ
- 4. शैल स्क्रिप्ट्स के लिए प्रदर्शन प्रोफाइलिंग टूल
- 5. मैं शैल स्क्रिप्ट्स वर्ण एन्कोडिंग कैसे बदलूं?
- 6. शैल स्क्रिप्ट्स में पढ़ने-योग्य चर का उपयोग
- 7. लिनक्स शैल स्क्रिप्ट्स में रंग समर्थन के लिए परीक्षण
- 8. शैल स्क्रिप्ट्स में elif fi का उपयोग करना
- 9. फ़ंक्शन से बेनामी प्रकार वापसी
- 10. बेनामी फ़ंक्शन और मेमोरी खपत
- 11. स्कैला जेनेरिक फ़ंक्शन मान (बेनामी फ़ंक्शन) - गुम पैरामीटर प्रकार (त्रुटि)
- 12. बेनामी समारोह
- 13. शैल स्क्रिप्ट
- 14. शैल
- 15. शैल स्क्रिप्ट से फ़ंक्शन आयात करना
- 16. बेनामी प्रकार
- 17. बेनामी प्रकार
- 18. बेनामी कक्षा
- 19. बेनामी टाइप
- 20. बेनामी टाइप
- 21. बेनामी समारोह आशुलिपि
- 22. जीसीसी स्टेटमेंट एक्सप्रेशन का उपयोग कर बेनामी फ़ंक्शन
- 23. बेनामी फ़ंक्शन/क्लोजर और स्वयं का उपयोग :: या स्थिर ::
- 24. Aptana स्टूडियो 3: शैल स्क्रिप्ट्स के सिंटेक्स हाइलाइटिंग कैसे प्राप्त करें * .sh
- 25. शैल
- 26. शैल
- 27. अन्य स्क्रिप्ट्स (स्रोत) आर स्क्रिप्ट को अन्य स्क्रिप्ट्स में कैसे शामिल करें
- 28. शैल
- 29. शैल
- 30. एएसपी.नेट, सी # और बेनामी प्रकार - मैन्युअल रूप से बेनामी टाइप
कामकाज के रूप में, मैं नामों के साथ कार्यों को परिभाषित करता हूं और केवल सरणी में नाम संग्रहीत करता हूं; फिर जब आप फ़ंक्शन को कॉल करना चाहते हैं तो सरणी तत्व को केवल 'eval' करें। – choroba
@choroba शायद आपको इसे एक उत्तर के रूप में पोस्ट करना चाहिए। यद्यपि इग्नासिओ के वर्णन के रूप में यह संभव नहीं है, आपका कामकाज एक अच्छा विचार है। – Matty
क्या सीवीई-2014-6271 [लिंक] में बश बग है (https://www.reddit.com/r/netsec/comments/2hbxtc/cve20146271_remote_code_execution_through_bash/ckrhvtl) पुष्टि करें कि अज्ञात फ़ंक्शन शैल स्क्रिप्ट में मौजूद हो सकते हैं? – Lizz