2008-09-30 9 views
20

में मैंने देखा है कि कभी-कभी रैपर स्क्रिप्ट "[email protected]" के बजाय पैरामीटर के लिए ${1:+"[email protected]"} का उपयोग करेंगे।

उदाहरण के लिए, http://svn.macosforge.org/repository/macports/trunk/dports/editors/vim-app/files/gvim.sh का उपयोग करता

exec "$binary" $opts ${1:+"[email protected]"} 

किसी को भी अंग्रेजी में टूट ${1:+"[email protected]"} और व्याख्या कर सकते हैं क्यों यह सादा "[email protected]" से अधिक लाभ हो सकता है?

उत्तर

13

'उन्माद किशमिश', उर्फ ​​ऐतिहासिक कारणों से।

$ 1 से मौजूद है और एक खाली स्ट्रिंग नहीं है, तो बहस के उद्धृत सूची स्थानापन्न:

JesperE से स्पष्टीकरण (या बैश आदमी पेज) यह क्या करता है के लिए सटीक है।

20 या उससे अधिक साल पहले, बोर्न शैल के कुछ टूटे हुए मामूली रूपों ने "$ @" के लिए एक खाली स्ट्रिंग को प्रतिस्थापित किया, यदि कोई तर्क नहीं था, तो कुछ भी प्रतिस्थापित करने के सही, वर्तमान व्यवहार के बजाय। चाहे ऐसी कोई भी प्रणाली अभी भी उपयोग में है, बहस के लिए खुली है।

[हम्म: कि विस्तार के लिए ठीक से काम नहीं होगा:

command '' arg2 arg3 ... 

इस संदर्भ में, सही अंकन है:

${1+"[email protected]"} 

यह सही ढंग से है कि क्या $ 1 है एक खाली तर्क या नहीं काम करता है। तो, किसी को गलत तरीके से अंकन याद, गलती से एक बग शुरू]

+5

आह हे। हां, कम से कम http://google.com/codesearch के अनुसार आपके द्वारा उल्लिखित नोटेशन अधिक आम है। मैं $ के लिए देखने के 191,000 परिणामों {1 + "$ @"} (अर्थात् कोई कोलन) बनाम 173 परिणाम $ के लिए {1: + "$ @"}।बेशक, "मैन बैश" के उद्धरण में एक कोलन है। तो शायद कोलन का उपयोग एक बग नहीं है। । । –

+2

कोलन एक अलग परीक्षण है - यह एक गैर-खाली स्ट्रिंग की तलाश में है। इसका उपयोग अक्सर एक एनवी var के संबंध में किया जाता है जिसमें मूल्य होना चाहिए: $ {ENVVAR: + "- value = $ ENVVAR"} या जो भी हो। यह एक -value बनाता है = जो भी तर्क केवल तभी होता है जब ENVVAR एक गैर-खाली स्ट्रिंग पर सेट हो। –

2

बैश आदमी पृष्ठ से:

${parameter:+word} 
      Use Alternate Value. If parameter is null or unset, nothing is 
      substituted, otherwise the expansion of word is substituted. 

तो, "[email protected]" जब तक $1 सेट नहीं होने पर दिया जाता है। मैं क्यों वे सिर्फ "[email protected]" का इस्तेमाल किया है नहीं कर सका नहीं देख सकता।

+0

Btw: बैश मानव पेज वास्तव में अपने दोस्त जब यह इस जैसे सवालों की बात आती है। यह शायद मैन-पेज है जिसका मैं अक्सर उपयोग करता हूं। – JesperE

+0

आप 'मैन बैश' के बारे में सही हैं। क्षमा करें, मुझे उस उद्धरण को भी मिला था लेकिन इसमें मेरे प्रश्न में शामिल नहीं था। मैं मानता हूँ कि वे शायद सिर्फ "$ @" का इस्तेमाल किया जा सकता था लेकिन $ {1: + "$ @"} के लिए एक कारण होना चाहिए। । । शायद हम पता लगाएंगे। :) –

+0

मैं या तो वूडू प्रोग्रामिंग से इनकार नहीं हैं,। ;-) – JesperE

2

जानकारी के लिए man bash के संबंधित भाग कि जोनाथन Leffler उसकी टिप्पणी में निर्दिष्ट के शब्दों में: सबस्ट्रिंग विस्तार प्रदर्शन नहीं जब

। , एक पैरामीटर है कि है के लिए बैश परीक्षण सेट नहीं है या अशक्त; कोलन को छोड़कर केवल पैरामीटर के लिए को अनसेट करें।

(जोर मेरा)

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