web-dev-qa-db-ja.com

Bashで複数行のコメントを作成する方法

私は最近シェルスクリプトの勉強を始めました、そしてシェルスクリプトの行のセットをコメントアウトできるようにしたいです。 C/Javaの場合のようです。

/* comment1
   comment2 
   comment3
*/`

どうすればいいの?

131

開くには: 'を、閉じるには'を使用してください。

例えば:

: '
This is a
very neat comment
in bash
'
242
Vegas

Bashで複数行コメント

: <<'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
92
David Okwii

Bashは組み込み機能を提供しませんが、既存のbash構文を使用するハックがあります。最も簡単な方法は、HEREDOCを使用することですが、自分が何をしているのかを明確にし、どこにでも同じHEREDOCマーカーを使用することです。

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

line 3
line 4
--MULTILINE-COMMENT--

一部の投稿では、シェルによる副作用の解析を避けるためにHEREDOCマーカーを引用符で囲む必要があると述べています。あなたのコメントにバッククォートを使用している場合、私はこれが必要であると思うだけでした。コメントにset -o verbose$variablesが含まれていても、マーカーを引用符で囲む必要はありません。 YMMV.

別の回答で言及した: 'アプローチを使用する場合は、それをメタコメントで文書化し、どこでも同じメタコメントを使用し、コメント内の'の出現箇所をすべて2倍にすることを忘れないでください。 ):

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

どちらもハックなので、将来スクリプトを破る可能性があります。

確かに他のテクニックもありますが、それを行うための「従来の」方法はないようです。

19
Oliver

ここで他の答えを読んだ後、私は以下を思い付きました、それは私見がそれがコメントであることを本当に明らかにします。スクリプト内使用情報に特に適しています。

<< ////

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.

////

プログラマとして、スラッシュの並びは私の頭脳にコメントとして即座に登録されます(スラッシュは通常行コメントに使われますが)。

"////"は単なる文字列です。接頭辞と接尾辞のスラッシュ数は等しくなければなりません。

14
noamtm

これについてあなたの意見は何ですか?

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

これが私がどのようにbashで複数行コメントをするかです。

このメカニズムには2つの利点があります。 1つは、コメントを入れ子にできることです。もう1つは、開始行をコメントアウトするだけでブロックを有効にできることです。

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

上記の例では、 "B"ブロックはコメントアウトされていますが、 "B"ブロックではない "A"ブロックの部分はコメントアウトされていません。

その例を実行すると、次の出力が生成されます。

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

#私は怠惰と単純さが好きです。私は面白い回避策で#を使います:

1 PRESS:] ctrl + Fまたはcmd + Fまたはその他何でも[find機能をトリガーするために]

2検索フィールドで次のように正規表現を使用します。(^.+)

3:# $1に置き換えてください。または#$1をお望みの場合


#注意:エディタには3つのステップがないかもしれません。その場合は、オンラインの正規表現ツールを使用してください(ポリシーの理由から、ここではこれを推奨することはできません)

  1. テキストを選択してどこにでもコピーしてオンラインの正規表現ツールに貼り付ける
  2. 正規表現として(^.+)を、置換パターンとして#$1または#\1を使用してください
  3. テキストを選択してコピーし、始めの場所に貼り付けます

#あなたのハッシュを楽しんでください!

0
AMDP