शेल चर $ _ अपेक्षा के अनुरूप व्यवहार नहीं कर रहा है


11

लाइनों की संख्या भिन्न होने का कारण क्या है?

$ head -n 100000 ./access.log > ./data/log.sample
$ cat $_ | wc -l
1933424

1
बैश के लिए विशेष पैरामीटर्स भी देखें
पंड्या

1
एक इंटरैक्टिव संदर्भ में, !$वही करता है जो आप चाहते थे, लेकिन यह एक स्क्रिप्ट IIRC में काम नहीं करेगा।
zwol

@zwol: हाँ। मैंने इसके बारे में एक सवाल पूछा ।
लूम

आपको teeअपनी स्क्रिप्ट में कमांड का उपयोग करना चाहिए ।
दिति

जवाबों:


26

$_का विस्तार हो रहा है ./access.log(अंतिम निष्पादित कमांड के अंतिम तर्क), नहीं ./data/log.sample

तो आप वास्तव में की लाइनों की संख्या देख रहे हैं ./access.log

पुनर्निर्देशन ( >) headकमांड का हिस्सा नहीं है क्योंकि यह शेल द्वारा किया जाता है इससे पहले कि headकमांड शुरू भी हो जाए। इसलिए आपके साथ $_होगा ./access.log


से man bash:

($ _, एक अंडरस्कोर।) शेल स्टार्टअप पर, शेल या शेल स्क्रिप्ट को लागू करने के लिए उपयोग किए जाने वाले निरपेक्ष पथनाम पर सेट किया जाता है जिसे पर्यावरण या तर्क सूची में पारित किया जाता है। इसके बाद, विस्तार के बाद पिछले तर्क के अंतिम तर्क तक फैलता है । साथ ही निष्पादित किए गए प्रत्येक कमांड को लागू करने के लिए उपयोग किए गए पूर्ण पथनाम पर सेट है और उस कमांड को निर्यात किए गए वातावरण में रखा गया है। मेल की जाँच करते समय, यह पैरामीटर मेल फ़ाइल का नाम रखता है।


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