سؤال

وأنا أتساءل عما اذا كان هناك وسيلة لتعليق خارج مجموعة من الخطوط في شيل. كيف يمكن أن أفعل ذلك؟ يمكننا استخدام / * * / في لغات البرمجة الأخرى. هذا هو الأكثر فائدة وأنا عندما تحويل / استخدام / تعديل السيناريو آخر وأريد للحفاظ على خطوط الأصلية بدلا من حذف.

ويبدو على وظيفة مرهقة للعثور على وبادئة # لجميع الخطوط التي لا يتم استخدامها.

ودعونا نقول هناك 100 خطوط في البرنامج النصي في خطوط يترتب التي ليست لاستخدامها. أريد أن أعلق كل منهم في دفعة واحدة. هل هذا ممكن؟

هل كانت مفيدة؟

المحلول

if false
then

...code...

fi

وfalse دوما بإرجاع كاذبة ولذلك فإن هذا سوف تخطي دائما رمز.

نصائح أخرى

والأسلوب الأكثر تنوعا وآمنة يضع التعليق في الفراغ نقلت here-document، مثل هذا:

<<"COMMENT"
    This long comment text includes ${parameter:=expansion}
    `command substitution` and $((arithmetic++ + --expansion)).
COMMENT

ونقلا محدد COMMENT سبق هو ضروري لمنع المعلمة التوسع، واستبدال القيادة والتوسع الحسابي، والذي سيحدث خلاف ذلك، كما اليدوي باش وPOSIX قذيفة معيار <أ href = ل "http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_07_04">specifies .

في الحالة المذكورة أعلاه، وليس نقلا عن COMMENT شأنه أن يؤدي إلى parameter متغير يجري تعيين expansion النص، إذا كان فارغا أو ضبطه، والقيادة التنفيذية command substitution، تزايد arithmetic متغير وdecrementing expansion متغير.

وبمقارنة حلول أخرى لهذه:

وعن طريق if false; then comment text fi يتطلب نص التعليق لتكون كود باش الصحيح نحويا في حين تعليقات الطبيعية في كثير من الأحيان لا، إذا فقط من أجل الفواصل العليا غير المتوازنة ممكنة. الشيء نفسه ينطبق على : || { comment text } بناء.

ووضع التعليقات في حجة باطلة قيادة نقلت واحدة، كما هو الحال في :'comment text'، لديه عيب عدم القدرة على إدراج الفواصل العليا. انقر نقرا مزدوجا نقلت الحجج، كما هو الحال في :"comment text"، لا تزال تخضع لالمعلمة التوسع، استبدال القيادة والتوسع الحسابي، وهو نفس غير المدرجة هنا وثيقة محتويات ويمكن أن يؤدي إلى آثار جانبية المذكورة أعلاه.

<ع> استخدام البرامج النصية ومرافق محرر بادئة كل سطر في تلقائيا كتلة مع '#' له وجاهته، ولكن لا يجيب بالضبط هذه المسألة.

ويمكنك أيضا وضع متعدد الخطوط تعليقات باستخدام:

: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'

وحسب المرجع باش ل بورن شل builtins

<اقتباس فقرة>   

و: (القولون)

     

و: [الحجج]

     

لا تفعل شيئا ما وراء توسيع الحجج وأداء إعادة التوجيه. حالة العودة هو صفر.

وضعت

وبفضل إكرام لافتا من ذلك في آخر النصي شل متعددة تعليق سطر

والمحررين نص يكون لها ميزة مذهلة تسمى البحث والاستبدال. لا أقول لكم ما المحرر الذي تستخدمه، ولكن منذ مخطوطات قذيفة تميل إلى أن تكون * لا شىء، وأنا استخدم VI، وهنا الأمر أن أعلق خطوط 20-50 من بعض شيل:

:20,50s/^/#/
: || {
your code here
your code here
your code here
your code here
}

وماذا لو كنت مجرد التفاف التعليمات البرمجية في وظيفة؟

وحتى هذا:

cd ~/documents
mkdir test
echo "useless script" > about.txt

ويصبح هذا:

CommentedOutBlock() {
  cd ~/documents
  mkdir test
  echo "useless script" > about.txt
}

وحسب هذه الموقع :

#!/bin/bash
foo=bar
: '
This is a test comment
Author foo bar
Released under GNU 
'

echo "Init..."
# rest of script

وتبعا لمحرر الذي تستخدمه هناك بعض الاختصارات التعليق كتلة من الخطوط.

والحل آخر يتمثل في وضع التعليمات البرمجية الخاصة بك في "اذا كان (0)" كتلة مشروط.)

وهذا بيرل بطانة احد التعليقات من خطوط 1-3 من orig.sh ملف شامل (حيث يتم ترقيم السطر الأول 0)، ويكتب نسخة علق على cmt.sh.

perl -n -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh > cmt.sh

من الواضح يمكنك تغيير أرقام الحدود كما هو مطلوب.

إذا كنت ترغب في تعديل الملف في مكان، انها حتى أقصر:

perl -in -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh

تجريبي

$ cat orig.sh 
a
b
c
d
e
f

$ perl -n -e '$s=1;$e=3; $_="#$_" if $i>=$s&&$i<=$e;print;$i++' orig.sh > cmt.sh

$ cat cmt.sh 
a
#b
#c
#d
e
f
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top