2016-05-10 27 views
6

[email protected] और "[email protected]" के बीच कोई अंतर है?

मुझे समझ में आता है कि गैर विशेष पात्रों के लिए अंतर हो सकता है, लेकिन @ इनपुट तर्कों के साथ साइन इन करने के बारे में क्या?

+1

प्रश्न सख्त डुप्लिकेट नहीं है, लेकिन उत्तर इस प्रश्न का उत्तर भी देते हैं। –

उत्तर

9

हाँ!

$ cat a.sh 
echo "[email protected]" 
echo [email protected] 

की यह चलने दें:

$ ./a.sh 2 "3  4" 5 
2 3  4 5     # output for "[email protected]" 
2 3 4 5      # output for [email protected] -> spaces are lost! 

आप देख सकते हैं, [email protected] का उपयोग कर मानकों को बनाता है जब एक पैरामीटर के रूप में इस्तेमाल कुछ सामग्री "हार" करने के लिए। उदाहरण के लिए - I just assigned a variable, but echo $variable shows something else इस बारे में विस्तृत स्पष्टीकरण के लिए देखें।


GNU Bash manual --> 3.4.2 Special Parameters से:

@

($ @) स्थितीय मापदंडों के विस्तार, एक से शुरू। जब विस्तार डबल कोट्स के भीतर होता है, तो प्रत्येक पैरामीटर अलग-अलग शब्द तक फैलता है। यही है, "$ @" "$ 1" "$ 2" के बराबर है ...। यदि डबल-उद्धृत विस्तार एक शब्द के भीतर होता है, तो का विस्तार पहला पैरामीटर मूल शब्द के प्रारंभिक भाग से जुड़ा हुआ है, और अंतिम पैरामीटर का विस्तार अंतिम शब्द के अंतिम भाग में शामिल हो गया है। जब कोई स्थितित्मक पैरामीटर नहीं होते हैं, "$ @" और $ @ कुछ भी नहीं बढ़ते हैं (यानी, उन्हें हटा दिया जाता है)।

5

कमांड पर $ @ पास करने से आदेश के सभी तर्क पास हो जाते हैं। यदि किसी तर्क में कोई स्थान होता है तो कमांड उस तर्क को दो अलग-अलग के रूप में देखेगा।

कमांड में "$ @" पास करने से सभी तर्कों को आदेश में उद्धृत स्ट्रिंग के रूप में पास किया जाता है। कमांड में व्हाइटस्पेस युक्त एक तर्क के रूप में व्हाइटस्पेस युक्त एक तर्क दिखाई देगा।

आसानी से अंतर कल्पना करने के लिए एक समय में एक समारोह है कि एक पाश में अपने सभी तर्क प्रिंट, एक लिखें:

#!/bin/bash 

loop_print() { 
    while [[ $# -gt 0 ]]; do 
     echo "argument: '$1'" 
     shift 
    done 
} 

echo "#### testing with \[email protected] ####" 
loop_print [email protected] 
echo "#### testing with \"\[email protected]\" ####" 
loop_print "[email protected]" 

<script> "foo bar" 

साथ कि स्क्रिप्ट कॉलिंग उत्पादन का उत्पादन होगा

#### testing with [email protected] #### 
argument: 'foo' 
argument: 'bar' 
#### testing with "[email protected]" #### 
argument: 'foo bar' 
संबंधित मुद्दे