$ और बाश में क्या उपयोग है?


10

मैं बैश में विशेष मापदंडों में देख रहा था। मैं यह जानने के लिए उत्सुक हूं कि यह क्या है $&और कैसे अलग है $_

मैं कमांड को चलाते समय निम्नलिखित आउटपुट देखता हूं, लेकिन साथ ही अर्थ का पता नहीं लगा सकता।

k@Linux:~$ echo $&
[1] 12397
$
k@Linux:~$ echo $n

[1]+  Done                    echo $
k@Linux:~$ 

जवाबों:


18

$&एक एकल टोकन / विशेष चर नहीं है, यह बस $और है &

आदेश echo $&के रूप में माना जाता है echo $ &, जो $पृष्ठभूमि में एक शाब्दिक इकोस करता है।

$_ दूसरी ओर एक विशेष चर है जो सबसे हाल ही में निष्पादित कमांड के अंतिम तर्क तक फैलता है।


5

जबकि bashपहलू को कवर किया गया है, आपका प्रश्न मुझे लगता है कि आप perlकोड में उन चर में आ गए हैं ।

$&और $_में विशेष चर रहे हैं perl। और वे विशेष रूप perlसे शेल कोड से बुलाए गए कोड में पाए जाते हैं ।

$_डिफ़ॉल्ट चर कई perlकार्यों और ऑपरेटरों पर काम करता है। वह चर इनपुट ऑपरेटरों द्वारा निर्धारित डिफ़ॉल्ट चर भी है।

में:

perl -pe 'some-code' < some-input

कुछ-इनपुट कुछ-इनपुट की प्रत्येक पंक्ति के लिए चलाए जाते हैं, जिसमें लाइन जमा होती है $_, और $_कुछ-कोड चलने के बाद सामग्री मुद्रित होती है।

s/regex/replacement/ऑपरेटर पर काम करता है $_डिफ़ॉल्ट रूप से। तो आप अक्सर चीजों को ढूंढते हैं:

perl -pe 's/foo/bar/'

जो इसके लिए छोटा है:

perl -pe '$_ =~ s/foo/bar/'

(ऊपर, $_जहाँ तक शेल का संबंध है perl, इंटरप्रेटर को दिए गए एक क्रियात्मक तर्क का सिर्फ एक हिस्सा है । यह शेल वेरिएबल नहीं है। उस शब्दशः तर्क को perlअभिव्यक्ति के रूप में पारित किया गया है -e) perlऔर इसके लिए perlइसकी व्याख्या की गई है। चर)।

$&एक अन्य विशेष perlचर है जो पिछले मिलान ऑपरेटर ( m/.../, s/.../.../...) द्वारा जो कुछ भी मिलान किया गया था, उसका विस्तार करता है ।

उदाहरण के लिए:

$ echo foo | perl -lne '
    print "The last character in $_ is $&" if m/.$/'
The last character in foo is o

या:

$ echo foo bar | perl -pe 's/[aeiou]+/<$&>/g'
f<oo> b<a>r

1

प्रदान करने का &अर्थ है कि आप बैकएंड या नौकरी के रूप में एक विशेष कमांड चलाने जा रहे हैं। तो यह है कि क्या उत्पादन echo $&देता है।

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