बैश स्क्रिप्ट फंक्शन पैरामीटर के रूप में $ @ का क्या अर्थ है


17

$@बैश स्क्रिप्ट फ़ंक्शन पैरामीटर के रूप में क्या मतलब है?

उदाहरण:

function foo()
{
    echo "$@" 1>&2;
}

जवाबों:


21

$@सभी मापदंडों को चर फैलता इस्तेमाल किया जब फ़ंक्शन कॉल, इसलिए

function foo()
{
    echo "$@"
}

foo 1 2 3

प्रदर्शित करेगा 1 2 3। यदि किसी फ़ंक्शन के अंदर उपयोग नहीं किया जाता है, तो यह स्क्रिप्ट को कॉल करते समय उपयोग किए जाने वाले सभी मापदंडों को निर्दिष्ट करता है। अधिक जानकारी के लिए bash मैनुअल पेज देखें ।


12

$ @ बाश में दो "स्थितीय पैरामीटर" अभ्यावेदन में से एक है, दूसरा $ * है।

दोनों, $ @ और $ * आंतरिक बैश चर हैं जो एक फ़ंक्शन या स्क्रिप्ट में पारित सभी मापदंडों का प्रतिनिधित्व करते हैं, एक महत्वपूर्ण अंतर के साथ , $ @ में प्रत्येक पैरामीटर एक अलग उद्धृत स्ट्रिंग के रूप में है, जबकि $ * में सभी पैरामीटर एक एकल स्ट्रिंग के रूप में हैं। यह अंतर निम्नलिखित कोड में दिखाया गया है:

foo() {
  while [ "$1" != "" ]; do
      echo $1
    shift
  done
}

dollar_at () {
    foo "$@"
}

dollar_star () {
    foo "$*"
}

echo "Using \$@"
dollar_at a b c

echo "Using \$*"
dollar_star a b c

आउटपुट:

Using $@
a
b
c
Using $*
a b c

ध्यान दें, जब $ * के साथ बुलाया जाता है, ठीक एक तर्क को foo () में पास किया जाता है, लेकिन $ @ के साथ तीन तर्क foo () में दिए जाते हैं।

अधिक जानकारी: http://tldp.org/LDP/abs/html/internalvariables.html#APPREF


0

मुझे उम्मीद है कि इसका मतलब हैश सभी इनपुट मापदंडों के रूप में लेना चाहिए। इसलिए यदि 3 इनपुट पैरामीटर हैं, तो वे $ 1, $ 2, $ 3 के रूप में फ़ंक्शन के भीतर उपलब्ध होंगे


2
नहीं, यह एक आंतरिक चर है जिसका अर्थ है किसी फ़ंक्शन को दिए गए सभी पैरामीटर। वे वैसे भी उपलब्ध हैं $1, $2आदि के बावजूद $@
टेराडन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.