বাশের জন্য ইনলাইন মন্তব্য?


142

আমি একটি লাইনের কমান্ডে একটি একক পতাকা মন্তব্য করতে সক্ষম হতে চাই। বাশ শুধুমাত্র from # till end-of-lineমন্তব্য আছে বলে মনে হচ্ছে । আমি এর মত কৌশলগুলি দেখছি:

ls -l $([ ] && -F is turned off) -a /etc

এটি কুৎসিত, কিন্তু কিছুই চেয়ে ভাল। একটি ভাল উপায় আছে কি?

নিম্নলিখিতটি কাজ করছে বলে মনে হচ্ছে তবে এটি পোর্টেবল কিনা তা আমি নিশ্চিত নই:

ls -l `# -F is turned off` -a /etc

#comment: কৌতুক এখানে উল্লেখ করা হয় stackoverflow.com/questions/9522631/...
জুহাকে Palomäki

1
@ জুহা পালোমাকি উল্লিখিত লিঙ্কটি অনুসরণ করার পরে, ${IFS#comment}মন্তব্যগুলিতে @pjh দ্বারা প্রবর্তিত এই দুর্দান্ত কৌশলটি রয়েছে । কোনও উপ-শেল চালু করা হয়নি।
অ্যালেক্সিস

উত্তর:


110

আমার পছন্দেরটি হ'ল:

বাশ স্ক্রিপ্টে মন্তব্য করা

এতে কিছুটা ওভারহেড থাকবে তবে প্রযুক্তিগতভাবে এটি আপনার প্রশ্নের উত্তর দেয়

echo abc `#put your comment here` \
     def `#another chance for a comment` \
     xyz etc

এবং বিশেষত পাইপলাইনগুলির জন্য, কোনও ওভারহেড ছাড়াই একটি ক্লিনার সমাধান রয়েছে

echo abc |        # normal comment OK here
     tr a-z A-Z | # another normal comment OK here
     sort |       # the pipelines are automatically continued
     uniq         # final comment

মাল্টি-লাইন কমান্ডের জন্য কীভাবে একটি লাইন মন্তব্য করা যায়


3
নোট করুন যে আপনাকে ব্যাকটিক্স ব্যবহার করতে হবে, $(#comment)কাজ করে না।
ফেনারল

1
কিছু সংস্করণ )মন্তব্যটির নিজের অংশ হিসাবে বিবেচনা করবে । বাশের বেশিরভাগ চ্যালেঞ্জগুলি পুরানো সংস্করণগুলির সাথে বিপরীতমুখী সামঞ্জস্যের কারণে, এবং একটি সাধারণ কৌশলটি সম্ভব প্রাচীনতম সমাধানটি ব্যবহার করা।
রাফারিনো

2
দ্রষ্টব্য, এটি একটি আসল মন্তব্য নয়: true && `# comment` && trueএটি একটি বৈধ এক্সপ্রেশন। একটি আসল মন্তব্য এমন কিছু তৈরি করতে পারে: syntax error near unexpected token && '`
সেবাস্তিয়ান ওয়াগনার

আপনি ঠিক @ সেবাস্তিয়ানওয়াগনার, এটাও মনে রাখবেন যে এটি একটি ওআর শর্ট সার্কিট বা এরকম কিছুতে ব্যর্থ হবে, তবে আমি মনে করি এটি এতটা ভাল যা আমরা জিনিসকে অনেক জটিল না করেই পেতে পারি। আমার কাছে এটি একটি লক্ষণ যে একটির জন্য আরও ভাল ভাষার প্রয়োজন, তবে এটি দস্তাবেজ করার জন্য ইতিমধ্যে নির্মিত কোডটি এ জাতীয় 'কমেন্টস' দিয়ে বজায় রাখা দুর্দান্ত করতে পারে।
রাফারিনো

ধন্যবাদ যে আমাকে সাহায্য করেছে!
xiarnousx

58

আমি কেবল লাইনটি অনুলিপি করা এবং মূল সংস্করণটি মন্তব্য করা সবচেয়ে সহজ (এবং সর্বাধিক পঠনযোগ্য) খুঁজে পেয়েছি:

#Old version of ls:
#ls -l $([ ] && -F is turned off) -a /etc
ls -l -a /etc

স্বচ্ছতার জন্য উত্সাহ। কেন এটি প্রথম বিকল্প নয় জানি না।
ডেভিড তাবারনারো এম।

কিন্তু তারপর এটি ইনলাইন না? আমি এটির ন্যায্য বলে মনে করি যে এটি বাশ দ্বারা অসমর্থিত জিনিসগুলি করা দরকার অন্য কোনও উপায়
সন্ধানের

25

$(: ...) কিছুটা কুরুচিপূর্ণ, তবে এখনও ভাল নয়।


2
এই বাক্য গঠন দ্বারা আপনি একটি উপ-শেল গুলি চালাচ্ছেন, কোড আচরণের বিন্দুমাত্র পরিবর্তন না করেই রেডিবিলিটি উন্নত করার জন্য একটি মন্তব্য দেওয়া হয়েছে, তবে এই সাব শেলটি লচ / শেষ করার সময়টি আপনার কোডকে ধীর করে দেবে (কমপক্ষে বলতে গেলে), নতুন লাইনের শুরুতে কেন কেবল কোলন ব্যবহার করবেন না?
রাফারিনো

1
$ {আইএফএস # ... With সহ কোনও উপ-শেল চালিত হয় না।
অ্যালেক্সিস

3
@ রাফারিনো: হ্যাঁ। তবে গুরুত্ব সহকারে, 95% অ্যাপ্লিকেশনগুলিতে এই ওভারহেডটি মোটেও বিবেচনা করবে না। বেশিরভাগ ক্ষেত্রেই এটি গুরুত্বপূর্ণ যেখানে, বাশের চেয়ে প্রথম দিকে দ্রুততর ভাষা ব্যবহার করা সম্ভবত ভাল ধারণা ছিল।
বাম দিকের বাইরে

... সমস্যাটি হচ্ছে $(: ...)সিনট্যাক্সটি আসলে মন্তব্যগুলি এম্বেড করার অনুমতি দেয় না বলে মনে হয়: যেখানে echo "foo" `# comment` "bar"দ্বিতীয় ব্যাকটিকের মন্তব্যটি সমাপ্ত হবে, অনুমানের সমতুল্যটি এর echo "foo" $(: # comment) "bar"পিছনে কিছু বিশ্লেষণ করে না #
বাম দিকের বাইরে


4

একাধিক পাইপযুক্ত কমান্ডের মধ্যে ইনলাইন মন্তব্যের জন্য আমার সমাধান এখানে।

অসম্পূর্ণ কোড উদাহরণ:

    #!/bin/sh
    cat input.txt \
    | grep something \
    | sort -r

একটি পাইপ মন্তব্য (একটি সহায়ক ফাংশন ব্যবহার করে) এর সমাধান:

    #!/bin/sh
    pipe_comment() {
        cat - 
    }
    cat input.txt \
    | pipe_comment "filter down to lines that contain the word: something" \
    | grep something \
    | pipe_comment "reverse sort what is left" \
    | sort -r

বা আপনি যদি পছন্দ করেন তবে সহায়তাকারী ফাংশন ছাড়াই এখানে একই সমাধান রয়েছে তবে এটি কিছুটা মেসওয়্যার:

    #!/bin/sh
    cat input.txt \
    | cat - `: filter down to lines that contain the word: something` \
    | grep something \
    | cat - `: reverse sort what is left` \
    | sort -r

7
একদিকে যেমন, আপনি যদি পাইপ চরিত্রটিকে আগের লাইনের শেষের দিকে নিয়ে যান তবে আপনি ইয়াকি ব্যাকস্ল্যাশ-নিউলাইনগুলি থেকে মুক্তি পেতে পারেন।
ট্রিপলি

3

বেশিরভাগ কমান্ড আর্গগুলিকে যে কোনও ক্রমে আসতে দেয়। মন্তব্য করা পতাকাগুলি কেবল লাইনের শেষ দিকে সরিয়ে দিন:

ls -l -a /etc # -F is turned off

তারপরে এটি আবার চালু করতে, কেবল কোনও অসুবিধা না করে পাঠ্যটি সরিয়ে ফেলুন:

ls -l -a /etc -F

1
খারাপ, আমি #কমান্ডের পরে কোনও একক সাদা জায়গা ছাড়াই যুক্ত করেছি । ধন্যবাদ!
asgs

1

যদি আপনি জানেন যে কোনও ভেরিয়েবল খালি, আপনি এটি একটি মন্তব্য হিসাবে ব্যবহার করতে পারেন। অবশ্যই এটি খালি না হলে এটি আপনার কমান্ডকে বিশৃঙ্খলা করবে।

ls -l $ {1 # -F বন্ধ আছে a -a / ইত্যাদি

.2 10.2। প্যারামিটার সাবস্টিটিউশন


${name:=comment}নিরাপদ থাকতে ব্যবহার করুন ।
can-ned_food

1

কমান্ডের কোনও অংশটি অক্ষম করার জন্য a && b, আমি কেবল একটি ফাঁকা স্ক্রিপ্ট তৈরি করেছি xযা পথে চলছে, তাই আমি এগুলি করতে পারি:

mvn install && runProject

যখন আমি নির্মাণ প্রয়োজন, এবং

x mvn install && runProject

যখন না (ব্যবহার Ctrl + Aএবং Ctrl + Eশুরু এবং শেষ দিকে যেতে)।

মন্তব্যে উল্লিখিত হিসাবে, এটি করার আরেকটি উপায় হ'ল :পরিবর্তে বাশ অন্তর্নির্মিত x:

$  : Hello world, how are you? && echo "Fine."
Fine.

2
এই জাতীয় :string; of; commands; : disabled; enabled;
বিল্টিন

আরও ভাল :) ধন্যবাদ
ওন্দ্র Žižka

-1

মন্তব্যটি যদি মূল্যবান হয় তবে এটি সম্ভবত লাইনের শেষে বা নিজের লাইনে যেতে পারে। আমি খুব কমই কোনও ভাষায় মন্তব্যের আগে এবং পরে কোডের সাথে লাইন মন্তব্যের প্রয়োজন খুঁজে পাই।

ওহ, একটি ব্যতিক্রম আছে, যা আমি সাধারণত ব্যবহার করি এমন এসকিউএল এর উপভাষা যা '{মন্তব্য}' ব্যবহার করে। মাঝে মাঝে লিখব:

CREATE UNIQUE INDEX u1_table ON Table(...);
CREATE {DUPS} INDEX d1_table ON Table(...);

এমনকি এটি একটি প্রসারিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.