2017-07-12 15 views
6

नीचे दिखाए गए इनपुट के रूप में !clear पास करते समय नीचे दिए गए जावा कोड दो तर्क प्रिंट करता है।यह जावा कोड दो तर्क क्यों प्रिंट करता है?

class Test{ 

    public static void main(final String... arguments){ 
     for(String argument : arguments){ 
      System.out.println(argument); 
     } 
    } 

} 

आउटपुट:

$ java Test !clear 
java Test clear 
clear 

अद्यतन

clear के स्थान पर किसी भी linux कमांड का उपयोग करते हुए एक ही परिणाम पैदा करता है।

$ java Test !pwd 
java Test pwd 
pwd 

$ java Test !ls 
java Test ls 
ls 

मुझे पता है कि इसने इतिहास में विस्तार के साथ कुछ करने के लिए कुछ किया है और मैं बच सकता हूं! इस मुद्दे को हल करने के लिए चरित्र।

हालांकि, मुझे सटीक कारण जानने के लिए उत्सुकता है कि यह कोड आउटपुट के रूप में उपरोक्त दो पंक्तियों को क्यों प्रिंट करता है। क्या कोई कृपया समझा सकता है?

+0

[यह आपको समझने में मदद कर सकता है] (https://stackoverflow.com/a/2718887/2749470) –

+0

@ पी.एएन आप '$' का वर्णन कर रहे हैं, न कि '!'। '$ foo' परिवर्तनीय विस्तार करता है। 'foo' इतिहास विस्तार करता है। –

उत्तर

4

आप यूनिक्स/लिनक्स शैल के भीतर काम कर रहे हैं, शायद bash! चरित्र यूनिक्स शैल में एक विशेष चरित्र है, और इस प्रकार आपके आदेश को इतिहास विस्तार माना जाता है।

इतिहास विस्तार में, सामान्य चीज जो होती है वह यह है कि खोल आपको दिखाता है कि आदेश क्या फैलता है। !clear का विस्तार clearहोगा, बशर्ते कि आपके पास में clear कमांड हो, और विस्तारित आदेश java Test clear होगा। तब खोल आदेश आदेश चलाता है। जावा चलता है और केवल एक तर्क देखता है - clear, और यही वह प्रिंट करता है।

अगर इसके बजाय, आप चलाने

java Test '!clear' 

(एकल उद्धरण के साथ!)

जावा तर्क !clear के रूप में है, इतिहास विस्तार के बिना मिल जाएगा।

यदि आप किसी ऐसे शब्द का उपयोग करते हैं जो शेल के इतिहास में नहीं है, तो आपको "ईवेंट त्रुटि नहीं मिली"। यदि आप किसी शब्द का उपयोग करते हैं, तो आपके शैल इतिहास में, तर्कों के साथ एक आदेश शुरू किया गया है, इसके सभी तर्कों के साथ पूरा आदेश प्रतिस्थापित किया जाएगा। यह bash का हिस्सा है और जावा नहीं है।

+1

हां, मुझे पता है कि मैं इस मुद्दे को हल करने के लिए इनपुट से बच सकता हूं। आपके विवरण के लिये धन्यवाद। तो, पहली पंक्ति जावा द्वारा मुद्रित नहीं है। – Beginner

+1

@ बेगिनर सही। यह खोल द्वारा मुद्रित है। – RealSkeptic

+0

हालांकि, जब मैं टाइप करता हूं! मेरे बैश में साफ़, मुझे कुछ भी मुद्रित नहीं दिखाई देता है, यह सिर्फ स्क्रीन को साफ़ करता है। ऐसा क्यों है? – Beginner

संबंधित मुद्दे