web-dev-qa-db-ja.com

シェルスクリプト内の特定の行をコメントアウトする方法

#以外のシェルスクリプト内の特定の行をコメントする方法を誰でも提案できますか?

5行コメントしたいとします。 #を各行に追加する代わりに、5行をコメントする他の方法はありますか?

56
user2400564

条件を使用して、スクリプトのセクションをコメント化できます。

たとえば、次のスクリプト:

DEBUG=false
if ${DEBUG}; then
echo 1
echo 2
echo 3
echo 4
echo 5
fi
echo 6
echo 7

出力されます:

6
7

コメント解除コードのセクションにするには、変数をコメント化するだけです:

#DEBUG=false

(そうすると、1から7までの数字が印刷されます。)

33
devnull

はい(ただし、厄介なハックです)。 heredoc を使用できます:

#!/bin/sh

# do valuable stuff here
touch /tmp/a

# now comment out all the stuff below up to the EOF
echo <<EOF
...
...
...
EOF

これは何をしていますか? heredocは、ターミネーター(この場合はEOF)までのすべての入力を、指定されたコマンドに送ります。したがって、コメントアウトしたいコードを囲むことができます

echo <<EOF
...
EOF

そして、2つのEOFの間に含まれるすべてのコードを取り、それらをechoにフィードします(echoはstdinから読み取らないため、すべて破棄されます)。

上記では、heredocに何でも入れることができることに注意してください。有効なシェルコードである必要はありません(つまり、適切に解析する必要はありません)。

これは非常に厄介であり、私は興味のあるポイントとしてのみ提供しています。 Cの/* ... */に相当することはできません

18
Brian Agnew

「#」に依存する必要がありますが、viでタスクを簡単にするには、次の操作を実行できます(最初にエスケープを押します)。

:10,20 s/^/#

コメントアウトする行の開始行番号と終了行番号が10および20である

完了したら元に戻すには:

:10,20 s/^#//
4
S. Morehouse

単一行コメントの場合、行の先頭にを追加します
複数行のコメントの場合は、開始する場所から'(単一引用符)を追加し、目的の場所に'(再び単一引用符)を追加しますコメント行を終了します。

2
Yash Shah