shell - बाश में बहुभाषी टिप्पणियां बनाने का तरीका?




comments multiline (5)

# मुझे आलस और सादगी पसंद है। मैं # मज़ेदार वर्कअराउंड का उपयोग करूंगा:

1 PRESS:] ctrl + F या cmd + F या जो भी [ढूढ़ें, उसे फंक्शनल फंक्शनलिटी को ट्रिगर करें

2 खोज फ़ील्ड में एक रेगेक्स का उपयोग करें जैसे: (^.+)

3 के साथ बदलें: # $1 या यदि आप #$1 पसंद करते हैं

# नोट: आपके पास अपने संपादक के तीन चरण नहीं हो सकते हैं। उस स्थिति में ऑनलाइन रेगेक्स टूल का उपयोग करें (नीतिगत कारणों से यहां कोई सुझाव नहीं दे सकते):

  1. चयन करें, जहाँ भी आप पाठ को कॉपी करें और ऑनलाइन रेगेक्स टूल में पेस्ट करें
  2. प्रतिस्थापन पैटर्न के रूप में regex और #$1 या #\1 रूप में (^.+) उपयोग करें
  3. चयन करें, पाठ की प्रतिलिपि बनाएँ और इसे वापस चिपकाएँ जहाँ आपने शुरू किया था

# अपने हैश का आनंद लें!

मैंने हाल ही में शेल स्क्रिप्ट का अध्ययन शुरू किया है और मैं एक शेल स्क्रिप्ट में लाइनों का एक सेट टिप्पणी करने में सक्षम होना चाहता हूं। मेरा मतलब है कि यह सी / जावा के मामले में है:

/* comment1
   comment2 
   comment3
*/`

ऐसा कैसे किया जा सकता था?


इस पर आपकी क्या राय है?

function giveitauniquename()
{
  so this is a comment
  echo "there's no need to further escape apostrophes/etc if you are commenting your code this way"
  the drawback is it will be stored in memory as a function as long as your script runs unless you explicitly unset it
  only valid-ish bash allowed inside for instance these would not work without the "pound" signs:
  1, for #((
  2, this #wouldn't work either
  function giveitadifferentuniquename()
  {
    echo nestable
  }
}

बहुभाषी टिप्पणी बैश में

: <<'END_COMMENT'
This is a heredoc (<<) redirected to a NOP command (:).
The single quotes around END_COMMENT are important,
because it disables variable resolving and command resolving
within these lines.  Without the single-quotes around END_COMMENT,
the following two $() `` commands would get executed:
$(gibberish command)
`rm -fr mydir`
comment1
comment2 
comment3
END_COMMENT

बैश एक बिलिन प्रदान नहीं करता है, लेकिन मौजूदा बैश सिंटैक्स का उपयोग करके हैक होते हैं। सबसे आसान है एक HEREDOC का उपयोग करना, लेकिन यह स्पष्ट करें कि आप क्या कर रहे हैं, और हर जगह समान HEREDOC मार्कर का उपयोग करें:

<< --MULTILINE-COMMENT--
line 1
line 2

line 3
line 4
--MULTILINE-COMMENT--

कुछ पदों का उल्लेख है कि कुछ शेल पार्सिंग दुष्प्रभावों से बचने के लिए HEREDOC मार्कर को उद्धृत किया जाना चाहिए। यदि आप अपनी टिप्पणी में backquotes का उपयोग करते हैं तो मुझे यह आवश्यक लगता है। टिप्पणी में उल्लिखित set -o verbose और $variables साथ भी, मार्कर को उद्धृत करना आवश्यक नहीं है। YMMV।

यदि आप एक और उत्तर में उल्लिखित : ' दृष्टिकोण का उपयोग करते हैं, तो यह एक मेटा-टिप्पणी के माध्यम से क्या दस्तावेज है, हर जगह एक ही मेटा-टिप्पणी का उपयोग करें, और टिप्पणी के भीतर ' की किसी भी घटना को दोगुना करने के लिए याद रखें (एक सिंटैक्स रंग संपादक इसे बना देगा स्पष्ट):

: 'Multiline comment:
line 1
line 2 we''re going to try this eventually
line 3
'

दोनों हैक हैं इसलिए वे भविष्य में स्क्रिप्ट को तोड़ सकते हैं।

निश्चित रूप से अन्य तकनीकें हैं, लेकिन ऐसा करने के लिए "पारंपरिक" तरीका नहीं लगता है।


यहां बताया गया है कि मैं कैसे bash में बहुस्तरीय टिप्पणियां करता हूं।

इस तंत्र के दो फायदे हैं जिनकी मैं सराहना करता हूं। एक यह है कि टिप्पणियों को नेस्टेड किया जा सकता है। दूसरा यह है कि ब्लॉक को केवल आरंभ करने की रेखा से टिप्पणी करके सक्षम किया जा सकता है।

#!/bin/bash
# : <<'####.block.A'
echo "foo {" 1>&2
fn data1
echo "foo }" 1>&2
: <<'####.block.B'
fn data2 || exit
exit 1
####.block.B
echo "can't happen" 1>&2
####.block.A

"बी" ब्लॉक के ऊपर के उदाहरण में टिप्पणी की गई है, लेकिन "ए" ब्लॉक के हिस्से जो "बी" ब्लॉक नहीं हैं, उन पर टिप्पणी नहीं की गई है।

उस उदाहरण को चलाने से यह आउटपुट उत्पन्न होगा:

foo {
./example: line 5: fn: command not found
foo }
can't happen




multiline