বাশে মাল্টলাইন মন্তব্য তৈরি করার উপায়?


224

আমি সম্প্রতি শেল স্ক্রিপ্ট অধ্যয়ন শুরু করেছি এবং আমি শেল স্ক্রিপ্টে লাইনগুলির একটি সেট মন্তব্য করতে সক্ষম হতে চাই। আমি বোঝাতে চাইছি এটি সি / জাভার ক্ষেত্রে যেমন:

/* comment1
   comment2 
   comment3
*/`

আমি এটা কিভাবে করতে পারি?


2
আপনি হ্যাশ জাতীয় ব্যবহার করতে পারেন: # এটি একটি মন্তব্য।
মোহাম্মদ তৈয়ব

1
আমি জানি তবে এটি মাল্টলাইনের জন্য কিছুটা ঝামেলাজনক।
এনেস মালিক তুরহান

2
এটি লক্ষ করা উচিত যে নীচের উত্তরগুলির :জন্য লাইনটির প্রথম কলামে (কোনও শীর্ষস্থান নেই) থাকা দরকার।
ty

উত্তর:


392

: 'খুলতে এবং 'বন্ধ করতে ব্যবহার করুন ।

উদাহরণ স্বরূপ:

: '
This is a
very neat comment
in bash
'

27
:( এবং অ-পঠন-ক্ষমতা এবং সম্ভাব্য বাগ-উত্সের একটি #
বৃহত পরিমাণ যুক্ত করেছে IM IMHO

51
@ jm666 আইএমএইচও কখনই সমস্ত ব্যবহারের ক্ষেত্রে আপনার ধারণা না থাকলে এই শব্দটি ব্যবহার করা কখনই ভাল ধারণা ।
শীতের

19
ব্যাখ্যা করতে: :শর্টহ্যান্ড trueএবং trueকোনও পরামিতি প্রক্রিয়া করে না। (ম্যানুয়াল পৃষ্ঠা:SYNOPSIS true [ignored command line arguments]
ফিল 294

46
এর মধ্যে :এবং স্থানটি 'গুরুত্বপূর্ণ
বেকো

23
কোড ব্লকগুলির জন্য আমি এটি কিছুটা সংশোধন করেছি যাতে আমি কোডটি সহজেই চালু বা বন্ধ করতে পারি। আমার পরিবর্তনটি # 'একক উদ্ধৃতির পরিবর্তে শেষ লাইনে ব্যবহার করা। এইভাবে আমি #কোডের ব্লকটি সক্রিয় করতে প্রথম লাইনে একটি একক রাখতে পারি । #কোডটি নিষ্ক্রিয় করতে প্রথম লাইনে সরান ।
জনমদ্দুর

131

ব্যাশে মাল্টলাইন মন্তব্য

: <<'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

4
এটি কাজ করে, বর্তমানে গৃহীত উত্তর (আমার পক্ষে নয়)।
ফ্রিকে

5
এটি সম্ভবত লক্ষ্য করার মতো যে এটি কোনও মন্তব্যই নয়। এটি হেরিডোক যা একটি বহু-লাইন স্ট্রিং হিসাবে NOP কমান্ডে পুনঃনির্দেশিত। একক উদ্ধৃতিটি সমাধানযোগ্য ভেরিয়েবল এবং কমান্ডগুলি অক্ষম করতে গুরুত্বপূর্ণ।
নিউজ

1
@ ফ্রি-তে স্থান যুক্ত করা দরকার
mazs

আমি এটি একটি সরল বাশ স্ক্রিপ্টে পরীক্ষা করেছি যা এটি শেবাং লাইনের মধ্য দিয়ে চলমান, #! / বিন / বাশ ডেবিয়ানে এবং এটি ব্যর্থ হয়েছে আমি এই পৃষ্ঠায় প্রতিটি উত্তর চেষ্টা করছি, এবং নীচের উত্তরটি না পাওয়া পর্যন্ত এগুলি সবই ব্যর্থ হয়েছে। যেহেতু তারা ব্যর্থ হয়েছে, আমি তাদের নীচে ভোট দিচ্ছি, এবং যা সঠিকভাবে চলছে তার আপ-ভোটিং করছি।
পাইটিস

1
আপনার উদাহরণে ভাল পরীক্ষা। নেতৃস্থানীয় :প্রয়োজন হয় না। শুধু দিয়ে শুরু <<
উইসবাকি

34

আমি মন্তব্য এবং অন্যান্য উত্তরের উপর ভিত্তি করে এই পোস্টটি আপডেট করছি, সুতরাং 22 শে মে 2020 এর আগের মন্তব্যগুলি আর প্রয়োগ করতে পারে না।

বাশ মাল্টি-লাইন মন্তব্যের জন্য একটি বিল্টিন সিনট্যাক্স সরবরাহ করে না তবে বিদ্যমান ব্যাশ সিনট্যাক্স ব্যবহার করে এমন হ্যাক রয়েছে যা "এখন কাজ করে"।

ব্যক্তিগতভাবে আমি মনে করি সবচেয়ে সরল (অর্থাত্ স্বল্প শব্দ, স্বল্প টাইপ করা, টাইপ করা সহজতম, সর্বাধিক স্পষ্ট) হ'ল উদ্ধৃত হারডোক ব্যবহার করা, তবে আপনি কী করছেন তা স্পষ্ট করে তুলুন এবং সর্বত্র একই হারডোক মার্ক ব্যবহার করুন:

<<'### BLOCK COMMENT'
line 1
line 2

line 3
line 4
### BLOCK COMMENT

একক-উদ্ধৃতি হারডোক মার্ক কিছু শেল পার্সিং পার্শ্ব-প্রতিক্রিয়াগুলি এড়িয়ে যায়, যেমন অদ্ভুত সাবসিটিশন যা ক্র্যাশ বা আউটপুট তৈরি করতে পারে এবং এমনকি মার্কার নিজেই পার্সিং করে। সুতরাং একক-উক্তি আপনাকে মুক্ত-নিবিড় মন্তব্য মার্কারকে আরও বেশি স্বাধীনতা দেয়। উদাহরণস্বরূপ নীচে একটি ট্রিপল হ্যাশ ব্যবহার করা হয়েছে যা ধরণের ক্ষেত্রে ব্যাশটিতে বহু-লাইন মন্তব্য প্রস্তাব করে। একক উদ্ধৃতি অনুপস্থিত থাকলে এটি স্ক্রিপ্টটি ক্র্যাশ করবে। এমনকি আপনি যদি অপসারণ ###, FOO{}স্ক্রিপ্ট বিপর্যস্ত হবে (বা খারাপ প্রতিকল্পন কারণ যদি ছাপা হবে কোন set -e) যদি এটা একক কোট জন্য পারিনি:

set -e

<<'### BLOCK COMMENT'
something something ${FOO{}} something
more comment
### BLOCK COMMENT

ls

আপনি অবশ্যই ব্যবহার করতে পারেন

set -e

<<'###'
something something ${FOO{}} something
more comment
###

ls

তবে এর উদ্দেশ্য অবশ্যই এই কৌশলটির সাথে অপরিচিত কোনও পাঠকের পক্ষে কম স্পষ্ট।

আজকাল যে কোনও ভাল সম্পাদক আপনাকে সিটিটিএল / / বা অনুরূপ টিপুন, নির্বাচনটি আন / মন্তব্য করতে অনুমতি দেয়। প্রত্যেকে অবশ্যই এটি বুঝতে পারে:

# something something ${FOO{}} something
# more comment
# yet another line of comment

যদিও স্বীকার করেছেন যে, আপনি যদি আপনার অনুচ্ছেদগুলি আবার পূরণ করতে চান তবে এটি উপরের ব্লক মন্তব্যের মতো প্রায় সুবিধাজনক নয়।

অবশ্যই অন্যান্য কৌশল আছে, তবে এটি করার কোনও "প্রচলিত" উপায় বলে মনে হচ্ছে না। এটা তোলে চমৎকার হবে যদি ###>এবং ###<, ব্যাশ যোগ করা যেতে পারে শুরু ও মন্তব্য ব্লক শেষে ইঙ্গিত দেখে মনে হচ্ছে এটি বেশ সহজবোধ্য হতে পারে।


1
আহ, এই এক স্মরণ রাখা যথেষ্ট সহজ / পরিষ্কার!
থমমে গওদা

1
পূর্ববর্তী উত্তর নোট হিসাবে, ব্যাককোটগুলি বাদ দিয়ে, ... (...) ক্রমটিও প্রসারিত হবে কারণ উভয় ফর্ম কমান্ড প্রতিস্থাপনের কারণ।
পার্ল আঙ্কার 15'19

"উভয়ই হ্যাক তাই তারা ভবিষ্যতে স্ক্রিপ্টগুলি ভেঙে ফেলতে পারে।" আপনি এই উপর প্রসারিত করতে পারেন? যদিও হ্যাক শব্দার্থগতভাবে, সিন্ট্যাক্টিকভাবে সেগুলি বৈধ এবং ভবিষ্যতে ভাঙা উচিত নয়, যতক্ষণ না বাশ বাকী হয়ে যাওয়ার সিদ্ধান্ত নেয় এবং উত্তরাধিকার ভেঙে না ফেলে।
পার্ল আঙ্কার 15'19

@ স্পিরিঙ্কার যদি আমরা সম্মত হই যে হ্যাকগুলি এমন কোনও ভাষা / লিবিব বৈশিষ্ট্য ব্যবহার করে যা সমস্যার সাথে সম্পূর্ণ সম্পর্কযুক্ত না (যেমন কোনও মন্তব্যের জন্য হেরডোক ব্যবহার করা বা কোনও কিছুই করার মতো কমান্ডে প্যারামিটার ব্যবহার করা হয় true), তবে তারা ডন না করলেও 'ঝুঁকিপূর্ণ ভাঙ্গা (হেরডোক পদ্ধতির নয়, তবে কোলন সংস্করণটি করে না), 1) হ্যাকগুলি এখনও অভিপ্রায়টিকে অস্পষ্ট করে তোলে: মাল্টলাইন মন্তব্য সম্পর্কে প্রথম লাইনটি ইঙ্গিত না করে, বেশিরভাগই তাদের মাথাটি স্ক্র্যাচ করে ভাববে যে কোডটি কী করছে; এবং 2) অপ্রত্যাশিত অন্ধকার কোণে (যেমন একটি উদ্ধৃতি দ্বিগুণ করা, নির্দিষ্ট ক্ষেত্রে বংশগত চিহ্নের উদ্ধৃতি ইত্যাদি)।
অলিভার

@ অলিভার: যদি উদ্ধৃত না হয় তবে ভেরিয়েবলের বাজে পার্শ্ব প্রতিক্রিয়া হতে পারে। কল্পনা করুন যে আপনার আপনার এম্বেড করা আছে heredoc যেমন একটি স্ট্রিং -comment ${FOO:=bar}বা ${FOO{}}। ভেরিয়েবলটি তৈরি এবং সেট করার জন্য প্রথমটির পার্শ্ব প্রতিক্রিয়া থাকতে পারে FOO, দ্বিতীয়টি একটি খারাপ প্রতিস্থাপনের ত্রুটি বাড়িয়ে তুলবে ; উভয় প্রভাব আপনি একটি বাস্তব মন্তব্য থেকে আশা করবেন না।
ব্যবহারকারী 1934428

24

অন্যান্য উত্তরগুলি এখানে পড়ার পরে আমি নীচে নিয়ে এসেছি, যা আইএমএইচও এটি সত্যই পরিষ্কার করে দিয়েছে এটি একটি মন্তব্য। স্ক্রিপ্ট ব্যবহারের তথ্যের জন্য বিশেষত উপযুক্ত:

<< ////

Usage:
This script launches a spaceship to the moon. It's doing so by 
leveraging the power of the Fifth Element, AKA Leeloo.
Will only work if you're Bruce Willis or a relative of Milla Jovovich.

////

প্রোগ্রামার হিসাবে, স্ল্যাশের ক্রমটি তত্ক্ষণাত আমার মস্তিষ্কে একটি মন্তব্য হিসাবে নিবন্ধভুক্ত করে (যদিও স্ল্যাশগুলি সাধারণত লাইনের মন্তব্যের জন্য ব্যবহৃত হয়)।

অবশ্যই, "////"কেবল একটি স্ট্রিং; উপসর্গ এবং প্রত্যয়গুলিতে স্ল্যাশের সংখ্যা অবশ্যই সমান হতে হবে।


3
আমি প্রায় মিসUsage:
RNA- এর

উপরের উত্তরে দুর্দান্ত সংযোজন। সত্যিই, আমি মনে করি আপনি পৃথক উত্তর দেওয়ার পরিবর্তে উপরের উত্তরটি সম্পাদনা করতে এবং এটিতে যুক্ত করতে পারেন।
পাইটিস

উপরে কয়েকটি "উপরে" উত্তর রয়েছে (আপনার সাজানোর ক্রমের উপর নির্ভর করে)। এবং, আলাদাভাবে উত্তর দিয়ে আমি আমার পছন্দ মতো স্ট্রিংয়ের পিছনে যুক্তি ব্যাখ্যা করতে চাই।
noamtm

<< EOF ... EOF
l মিঙ্গজি

5

এই সম্পর্কে আপনার মতামত কি?

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
  }
}

হ্যালো, মূল প্রশ্নের উত্তর না দিয়ে প্রশ্ন হিসাবে নয়
ইম্রে

ভাল আইএমও নয়। এটির মন্তব্যটি শেল কোড হিসাবে পার্সেবল হওয়া দরকার , যা বেশ সীমাবদ্ধ।
ব্যবহারকারী 1934428

3

এখানে আমি কীভাবে মাল্টলাইন মন্তব্য করি বাশে।

এই প্রক্রিয়াটির দুটি সুবিধা রয়েছে যা আমি প্রশংসা করি। একটি হ'ল মন্তব্যগুলি বাসা বাঁধতে পারে। অন্যটি হ'ল ব্লকগুলি কেবল আরম্ভের লাইনের বাইরে মন্তব্য করে সক্ষম করা যেতে পারে।

#!/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

3

আমি নির্বাচিত উত্তরটি চেষ্টা করেছিলাম, কিন্তু যখন আমি শেল স্ক্রিপ্টটি পেয়েছিলাম তখন এটি পুরোপুরি স্ক্রিনে মুদ্রিত হচ্ছিল (বৃহস্পতি নোটবুকগুলি উদ্ধৃতিতে কীভাবে সমস্ত কিছু মুদ্রণ করে তার অনুরূপ '''xx''') এবং শেষে একটি ত্রুটি বার্তা উপস্থিত হয়েছিল। এটি কিছুই করছে না, তবে: ভীতিজনক । তারপরে আমি এটি সম্পাদনার সময় বুঝতে পেরেছিলাম যে একক-উদ্ধৃতি একাধিক লাইন বিস্তৃত করতে পারে। সুতরাং .. কেবল একটি পরিবর্তনশীল ব্লক বরাদ্দ করা যাক।

x='
echo "these lines will all become comments."
echo "just make sure you don_t use single-quotes!"

ls -l
date

'

এটিকে কোনও ভেরিয়েবলের জন্য বরাদ্দ করার দরকার নেই, যা এমন একটি পার্শ্ব প্রতিক্রিয়া যা আমরা কোনও 'মন্তব্য' থেকে আশা করি না। প্রতিস্থাপন x=একটি দ্বারা : এবং আপনি পার্শ্ব প্রতিক্রিয়া সঙ্গে একই প্রভাব আছে। একমাত্র ত্রুটিটি হ'ল মন্তব্যটি অবশ্যই একটির উদ্ধৃতি ধারণ করে না। সে কারণেই আমি একটি উদ্ধৃত হেরডোক ব্যবহার পছন্দ করি: এর সাথে, মন্তব্যকারী তার পছন্দ মতো একটি উপযুক্ত সমাপ্তি স্ট্রিং চয়ন করতে পারে।
ব্যবহারকারী 1934428

2

সহজ সমাধান, খুব স্মার্ট নয়:

কোনও স্ক্রিপ্টের অংশ অস্থায়ীভাবে ব্লক করুন:

if false; then
    while you respect syntax a bit, please
    do write here (almost) whatever you want.
    but when you are
    done # write
fi

কিছুটা পরিশীলিত সংস্করণ:

time_of_debug=false # Let's set this variable at the beginning of a script

if $time_of_debug; then # in a middle of the script  
    echo I keep this code aside until there is the time of debug!
fi

-2

# আমি আলস্যতা এবং সরলতা পছন্দ করি। আমি একটি মজার কাজের সাথে # ব্যবহার করব:

1 টি প্রেস:] সিটিআরএল + এফ বা সেন্টিমিডি + এফ বা যা কিছু [সন্ধানের কার্যকারিতাটি ট্রিগার করতে সন্ধান করুন

2 সন্ধান ক্ষেত্রের মধ্যে একটি রেজেক্স ব্যবহার করুন: (^.+)

3 এর সাথে প্রতিস্থাপন করুন: # $1অথবা আপনি যদি চান তবে#$1


# দ্রষ্টব্য: আপনার সম্পাদকের তিনটি ধাপ নাও থাকতে পারে। সেক্ষেত্রে একটি অনলাইন রেইজেক্স সরঞ্জাম ব্যবহার করুন (নীতিগত কারণে এখানে কোনও প্রস্তাব দিতে পারে না):

  1. নির্বাচন করুন, আপনি যেখানেই থাকুন না কেন টেক্সটটি অনুলিপি করুন এবং এটি অনলাইন রেজেক্স সরঞ্জামটিতে পেস্ট করুন
  2. ব্যবহার করুন (^.+)Regex এবং #$1বা #\1প্রতিকল্পন নিদর্শন হিসাবে
  3. নির্বাচন করুন, পাঠ্যটি অনুলিপি করুন এবং আপনি যেখানে শুরু করেছেন সেখানে পেস্ট করুন

# আপনার হ্যাশ উপভোগ করুন!


আজকাল অনেক সম্পাদকের কাছে হটকি রয়েছে ctrl+/যা একাধিক লাইনের জন্য এমনকি মন্তব্যগুলি চালু বা বন্ধ করে দেবে। আপনি কোন ভাষাটি ব্যবহার করছেন তার উপর ভিত্তি করে এটি মন্তব্য চরিত্রটিও পরিবর্তন করতে সক্ষম।
নিনমনকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.