シェルスクリプトでコメントをブロックする


250

シェルスクリプトのコードブロックをコメントアウトする簡単な方法はありますか?


2
そのような簡単で単純な質問があまりにも異なって複雑な答えを持っているのは興味深いです。
Sigur 2016年

回答:


348

bashでは:

#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment

'そして'周りのEND区切り文字はそうでない場合は例えばのようなブロック内のものは、重要であり、$(command)解析され、実行されます。

説明については、これこの質問を参照してください。


24
キュートなトリック-「END」キーワード(もちろん、ユーザーが選択したもの)が、コメント化される素材内の単独の行に表示されない限り。
ジョナサンレフラー、

9
@kalengi:はい。引用符で使用される単語は、便利なものであれば何でも構いません。EOFは古典的な例です(そして!、それ自体は感嘆符です)が、コメント化された資料で単独で行に表示されないSNURFLE_BURGERSclassical_end_markerまたはその他の単語を使用できます。私はスペースなどを試してみるのはうんざりするだろうが、単語はそれらでもうまくいくかもしれない。
ジョナサンレフラー

4
それは間違いなく機能しますが、これがどのように機能するかについて誰でも詳しく説明できますか?ありがとう
mbbce

5
@ MB_CE、stackoverflow.com / questions / 32126653 /…を参照してください。つまり:、入力を読み取らず、常に正常な値で終了するコマンド()を実行し、「コメント」を入力として送信しています。それほど多くはありません。
Charles Duffy、

2
アクティブコードを記述してパッシブコードを作成するのは信じられないほど醜くて混乱します。古き良きブロック選択モードを使用して#を押してください。それの大きな問題は何ですか?
Rusty75

90

シェルスクリプトに関するブロックコメントはありません。

vi(はい、vi)を使用すると、n行目からm行目まで簡単にコメントできます

<ESC>
:10,100s/^/#/

(これは、10行目から100行目までを、#記号の付いた行頭文字(^)で置き換えます。)

とコメントを外す

<ESC>
:10,100s/^#//

(つまり、10行目から100行目まで、置換行開始(^)の後に//を付けた#が続きます。)

viどこにでもどこでもほぼ普遍的です/bin/sh


行の前に#を配置するviでの正規表現による素晴らしいトリック。
Atiq Rahman、2013

5
ヒント-vimを使用していて、すべての行の先頭が強調表示さ|nohれる場合は、最後に追加してください。パイプは追加のコマンドnohを区切り、ハイライトなしです。検索語の強調表示は、次に何かを検索したときに自動的に再開されます。例::10,100s/^/#/g|noh
Matthew

これをスクリプトから自動化する必要があります。人間の操作を必要とせずに、viでファイルにそれを行う方法はありますか?
ティモシースワン

1
@TimothySwan私はgawkまたはsedプログラムがそれを行うことができると想像します...どういうわけか。
BeowulfNode42 2018

viでブロックにコメントを付ける(またはプレフィックスを付ける)方法:コメントを開始する行の先頭に移動します(<SHIFT>+G 10 <ENTER>その後、0または他の方法で移動します)。次に、を使用<CTRL>+Vしてビジュアルブロックモードに入り、コメントを付けるすべての行の先頭を強調表示します(この例では90 J)。次に、を押しSHIFT+Iて、強調表示されたブロックの前に挿入します。コメント記号(例:)を入力し、#を押し<ESC>て接頭辞を終了します。この説明は非常に長く聞こえますが、私の経験では、実際にははるかに高速です。
Ueffes

52

以下を使用できます。

if [ 1 -eq 0 ]; then
  echo "The code that you want commented out goes here."
  echo "This echo statement will not be called."
fi

14
これは古典的ですが、stackoverflow.com / a / 19409316/832230のメモにあるように、if [ ];動作します。
Acumenus 2015

12
おそらくより明確です:if false;stackoverflow.com/a/18019516/2097284
Camille Goudeseune

3
これは、コメントされたテキストが実際にはコードである場合にのみ機能するようです。パイプとセミコロンのコメントで問題が発生しました。Sunny256の回答が機能しました。
swdev 2016年

さらに簡潔になるでしょう[]; テストの使用
Justin Duncan

27

以下は、のために働く必要がありshbashkshzsh

コメントするコードのブロックが内部に置くことができるBEGINCOMMENTENDCOMMENT

[ -z $BASH ] || shopt -s expand_aliases
alias BEGINCOMMENT="if [ ]; then"
alias ENDCOMMENT="fi"

BEGINCOMMENT
  echo "This line appears in a commented block"
  echo "And this one too!"
ENDCOMMENT

echo "This is outside the commented block"

上記のコードを実行すると、次の結果になります。

This is outside the commented block

このようにコメントされたコードブロックのコメント解除するには、次のように言います。

alias BEGINCOMMENT="if : ; then"

の代わりに

alias BEGINCOMMENT="if [ ]; then"

上記の例では。


23

一重引用符をかわすことができる場合:

__='
blah blah comment.
'

私はこれが好き。ダブルアンダースコアはどういう意味ですか?私が知る限り、それはプライベートとして扱う必要があるという慣例を使用した単なる変数名ですか?
chessofnerd 2015

また、ほとんどのエディターで構文の強調表示を提供し、$ __で必要に応じて呼び出すことができますが、わかりやすくするために、ドキュメントやドキュメントなどの変数名をお勧めします。
jasonleonhard


これが最良の答えです。ダブルアンダースコアの代わりにダミーの変数名をいくつか入力するだけです
B Abali

これを試しましたが、-F 'があったため失敗しました。コメントアウトするブロックの内側。
yO_


14

Vimの場合:

  1. コメントしたいブロックの最初の行に行く
  2. shift-V (ビジュアルモードに入る)、ブロック内のハイライト行を上下に移動
  3. 選択時に以下を実行します :s/^/#/
  4. コマンドは次のようになります。

      :'<,'>s/^/#
  5. Enterキーを押します

例えば

shift-V
jjj
:s/^/#
<enter>

7
コメントの使用を解除するには:s/^#/
Buge

@hortaの答えを確認してください:stackoverflow.com/a/28376319/3506015-キー操作がさらに少なくなります!
geedoubleya 2017年

4

次のように設計されたVi / VimのVisual Blockモードを使用できます。

Ctrl-V  
Highlight first element in rows you want commented  
Shift-i  
#  
esc  

コメントは次のようになります:

Ctrl-V  
Highlight #'s  
d  
l  

これは、行番号を数えたり読んだりするのではなく、viがこの種のことを行うインタラクティブな方法です。

最後に、Gvimでビジュアルブロックモードにするには、ctrl-vではなくctrl-qを使用します(これが貼り付けのショートカットだからです)。


この単純な方法が大好きです。:o)
geedoubleya 2017年

4

正直なところ、なぜそんなにオーバーエンジニアリングするのか...

パッシブコードを生成するためのアクティブコードを書くことは本当に悪い習慣だと私は思います。

私の解決策:ほとんどのエディターにはブロック選択モードがあります。これを使用して、コメント化するすべての行に#を追加します。大したことは...

メモ帳の例:

作成するには:Alt-マウスを下にドラッグして、#を押します。

削除するには:Altキーを押しながらマウスを下にドラッグ、Shiftキーを押しながら右矢印、削除。


8
ユーザーはおそらくターミナルにいます。マウス環境は想定できません。
ゲイリー

それらはまだ存在していますか?私は通常、グラフィカルモードで編集し、viを使用して貼り付けます。これは簡単な回避策です。
Rusty75

2

sunny256が承認した回答のhere-docトリックのバリエーションは、コメントにPerlキーワードを使用することです。コメントが実際に何らかのドキュメントである場合は、コメント付きブロック内でPerl構文の使用を開始できます。これにより、適切にフォーマットされた出力を印刷したり、manページに変換したりできます。

限りシェルが懸念している、あなただけ交換する必要がある'END''=cut'

echo "before comment"
: <<'=cut'
=pod

=head1 NAME
   podtest.sh - Example shell script with embedded POD documentation

etc.

=cut
echo "after comment"

(「シェルスクリプトへのドキュメントの埋め込み」にあります)


0

別のモードは次のとおりです。エディターにブロックコメントオプションがない場合、

  1. エディターの2番目のインスタンスを開きます(たとえば、File => New File ...)
  2. 作業中の前のファイルから、コメントが必要な部分のみを選択してください
  3. それをコピーして、新しい一時ファイルのウィンドウに貼り付けます...
  4. [編集]メニューを開き、[置換]を選択して、置換する文字列として入力します '\ n'
  5. 置換文字列として入力: '\ n#'
  6. ボタン「すべて置換」を押します

完了

すべてのエディターで機能します


0

私は単一行の開閉が好きです:

if [ ]; then ##
    ...
    ...
fi; ##

「##」を使用すると、ブロックコメントの開始と終了を簡単に見つけることができます。たくさんある場合は、「##」の後に数字を付けることができます。コメントをオフにするには、「[]」に「1」を付けるだけです。また、コメント付きブロックの単一引用符で発生していたいくつかの問題も回避します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.