स्थितीय पैरामीटर्स को संभालना एन मस्से
एक समूह के रूप में सभी स्थितीय मापदंडों को प्रबंधित करना कभी-कभी उपयोगी होता है। उदाहरण के लिए, हम किसी अन्य प्रोग्राम के चारों ओर एक "रैपर" लिखना चाह सकते हैं। इसका मतलब यह है कि हम एक स्क्रिप्ट या शेल फ़ंक्शन बनाते हैं जो किसी अन्य प्रोग्राम के आह्वान को सरल बनाता है। इस मामले में, रैपर रहस्यमय कमांड लाइन विकल्पों की एक सूची प्रदान करता है और फिर निचले स्तर के कार्यक्रम में तर्कों की एक सूची भेजता है।
शेल इस उद्देश्य के लिए दो विशेष पैरामीटर प्रदान करता है। वे दोनों स्थितीय मापदंडों की पूरी सूची में विस्तार करते हैं, लेकिन सूक्ष्म तरीकों से भिन्न होते हैं। वे हैं:
तालिका 32-1: * और @ विशेष पैरामीटर
पैरामीटर विवरण
पैरामीटर विवरण
$* स्थितीय मापदंडों की सूची में विस्तारित होता है, 1 से शुरू होता है। जब दोहरे उद्धरण चिह्नों से घिरा होता है, तो यह एक दोहरे उद्धृत स्ट्रिंग में विस्तारित होता है जिसमें सभी स्थितीय पैरामीटर होते हैं, प्रत्येक को IFS शेल चर के पहले वर्ण (डिफ़ॉल्ट रूप से एक स्थान) द्वारा अलग किया जाता है चरित्र)।
$@ 1 से शुरू करके स्थितीय मापदंडों की सूची में विस्तार करता है। जब दोहरे उद्धरण चिह्नों से घिरा होता है, तो यह प्रत्येक स्थितीय पैरामीटर को दोहरे उद्धरण चिह्नों से घिरे एक अलग शब्द में विस्तारित करता है।
यहां एक स्क्रिप्ट है जो इन विशेष मापदंडों को क्रियान्वित करती है:
स्थितीय पैरामीटरों को सामूहिक रूप से संभालना
#! / Bin / bash
# posit-params3: $* और $@ print_params () प्रदर्शित करने के लिए स्क्रिप्ट {
इको "\$1 = $1" इको "\$2 = $2" इको "\$3 = $3" इको "\$4 = $4"
}
pass_params () {
इको -ई "\n" '$* :'; print_params $* echo -e "\n" ''"$*" :'; print_params "$*" echo -e "\n" '$@ :'; print_params $@ echo -e "\n" ''"$@" :'; print_params "$@"
}
pass_params "शब्द" "रिक्त स्थान वाले शब्द"
#! / Bin / bash
# posit-params3: $* और $@ print_params () प्रदर्शित करने के लिए स्क्रिप्ट {
इको "\$1 = $1" इको "\$2 = $2" इको "\$3 = $3" इको "\$4 = $4"
}
pass_params () {
इको -ई "\n" '$* :'; print_params $* echo -e "\n" ''"$*" :'; print_params "$*" echo -e "\n" '$@ :'; print_params $@ echo -e "\n" ''"$@" :'; print_params "$@"
}
pass_params "शब्द" "रिक्त स्थान वाले शब्द"
इस जटिल कार्यक्रम में, हम दो तर्क बनाते हैं: "शब्द" और "रिक्त स्थान वाले शब्द", और उन्हें पास करते हैं pass_params समारोह। वह फ़ंक्शन, बदले में, उन्हें आगे भेजता है print_params फ़ंक्शन, विशेष मापदंडों के साथ उपलब्ध चार तरीकों में से प्रत्येक का उपयोग करके $* और $@. निष्पादित होने पर, स्क्रिप्ट अंतर प्रकट करती है:
[मुझे@लिनक्सबॉक्स ~]$ स्थिति-परम3
$* :
$1 | = | शब्द |
$2 | = | शब्द |
$3 | = | साथ में |
$4 | = | रिक्त स्थान |
"$*" :
$1 | = | रिक्त स्थान के साथ शब्द शब्द |
$2 | = | |
$3 | = | |
$4 | = |
$@ :
$1 | = | शब्द |
$2 | = | शब्द |
$3 | = | साथ में |
$4 | = | रिक्त स्थान |
"$@" :
$1 = शब्द
$2 = रिक्त स्थान वाले शब्द
$ 3 =
$ 4 =
$2 = रिक्त स्थान वाले शब्द
$ 3 =
$ 4 =
हमारे तर्कों के साथ, दोनों $* और $@ चार शब्दों का परिणाम तैयार करें:
रिक्त स्थान के साथ शब्द शब्द
"$*" एक शब्द का परिणाम उत्पन्न करता है:
"रिक्त स्थान के साथ शब्द शब्द"
"$@" दो शब्दों का परिणाम उत्पन्न करता है:
"शब्द" "रिक्त स्थान वाले शब्द"
जो हमारे वास्तविक इरादे से मेल खाता है. इससे यह सबक लेना चाहिए कि भले ही शेल स्थितीय मापदंडों की सूची प्राप्त करने के चार अलग-अलग तरीके प्रदान करता है, "$@"अधिकांश स्थितियों के लिए अब तक सबसे उपयोगी है, क्योंकि यह प्रत्येक स्थितीय पैरामीटर की अखंडता को बरकरार रखता है।