--परम = "मान" और "--परम = मान" में क्या अंतर है?


0

अतीत में मैंने पढ़ा है (स्रोत को याद नहीं कर सकता)

./script --param="value"

की तुलना में अलग-अलग परिणाम हो सकते हैं:

./script "--param=value"

और इन मतभेदों के कारण (जो सिस्टम / OSes / वितरण / गोले को स्विच करते समय स्पष्ट हो सकता है), आपको हमेशा करना चाहिए --param="value"। यही है, मैं जिसे "लेट कोटिंग" कहता हूं, (उद्धरण को अनुगामी भाग या न्यूनतम उप-भागों के चारों ओर रखें);

मैंने यह भी देखा कि लोग ऐसा तब करते हैं जब चर (यानी PATH=/bar:"$PATH", की तुलना में PATH="/bar:$PATH") संशोधित करते हैं । सामान्य तौर पर, मैं कहूंगा कि मैंने दूसरों को जो करते देखा है, उससे "देर से उद्धृत करना" पूरी बात को उद्धृत करने से अधिक सामान्य है।

मेरा सवाल है: क्या वास्तव में --param="value"और के बीच एक संभावित अंतर है "--param=value"? अगर मुझे कुछ उद्धृत करने की आवश्यकता है, तो क्या वास्तव में इसके केवल भाग को उद्धृत करने और पूरी बात को उद्धृत करने के बीच कोई अंतर है?

मैं इसके --param="value"बजाय करना "--param=value"चाहता हूं, लेकिन मैं इसे ज्यादातर इसलिए करता हूं क्योंकि मुझे लगता है कि यह मानसिक रूप से आसान है, इसलिए नहीं कि मैं किसी तकनीकी अंतर के बारे में जानता हूं।

जवाबों:


2

कम से कम आपके द्वारा उल्लेख किए गए विशेष मामलों में कोई अंतर नहीं है। खोल "वर्णों को छीन लेगा , और अंतिम परिणाम समान है। शेल उद्धृत करने वाले मुद्दों को डीबग करने के लिए, मैं कभी-कभी एक साधारण प्रोग्राम का उपयोग करता हूं जो सिर्फ अपने argv को प्रिंट करता है। उदाहरण के लिए,

$ printargs --param="value"
argv[0] = printargs
argv[1] = --param=value

$ printargs "--param=value"
argv[0] = printargs
argv[1] = --param=value

यहाँ संदर्भ के लिए कोड है:

#include <stdio.h>

int main(int argc, char** argv)
{
    int i;
    for (i = 0; i < argc; ++i) {
        printf("argv[%d] = %s\n", i, argv[i]);
    }
    return 0;
}

और शैल-लिपि समतुल्य:printargs(){ local arg; for arg; do echo "$arg"; done; }
लेकेनस्टाइन

@ लिकेनस्टेन: printfस्क्रिप्ट में बेहतर उपयोग , भी; अन्यथा printargs -nआपको आश्चर्य होगा।
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.