web-dev-qa-db-ja.com

シェルスクリプト内の一連の行をコメントアウトする

シェルスクリプトで一連の行をコメントアウトする方法があるかどうか疑問に思っていました。どうすればそれができますか?他のプログラミング言語では/ * * /を使用できます。これは、別のスクリプトを変換/使用/変更していて、削除するのではなく元の行を保持したい場合に最も役立ちます。

使用されていないすべての行に#を付けて接頭辞を付けるのは面倒な作業のようです。

スクリプトには、使用しない後続の行に100行あるとしましょう。一度にコメントアウトしたいです。それは可能ですか?

50
Vijay
if false
then

...code...

fi

falseは常にfalseを返すため、これは常にコードをスキップします。

46
Artelius

最も用途が広く安全な方法は、次のようにコメントを無効な引用符で囲まれたhere-documentに入れることです。

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

上記のCOMMENT区切り文字を引用符で囲むことは、Bashマニュアル 状態 およびPOSIXシェル標準 指定 =。

上記の場合、COMMENTを引用符で囲まないと、変数parameterにテキストexpansionが割り当てられます。空または未設定の場合、コマンドcommand substitutionを実行し、変数をインクリメントしますarithmeticおよびデクリメント変数expansion

これに対する他のソリューションの比較:

if false; then comment text fiを使用するには、コメントテキストが構文的に正しいBashコードである必要がありますが、自然なコメントは、不均衡なアポストロフィの場合のみである場合が多くありません。 : || { comment text }コンストラクトについても同じことが言えます。

:'comment text'のように、単一引用符で囲まれたvoidコマンド引数にコメントを入力すると、アポストロフィを含めることができないという欠点があります。 :"comment text"のように二重引用符で囲まれた引数は、引用符で囲まれていないヒアドキュメントの内容と同じように、パラメーター展開、コマンド置換、算術展開の対象となり、上記の副作用を引き起こす可能性があります。

スクリプトおよびエディター機能を使用して、ブロック内の各行の先頭に「#」を自動的に付けることにはメリットがありますが、質問に正確に答えることはできません。

45
spbnick

次を使用して複数行のコメントを挿入することもできます。

: '
comment1comment1
comment2comment2
comment3comment3
comment4comment4
'

Bourne Shell builtins のBashリファレンスに従って

:(コロン)

:[引数]

引数を展開してリダイレクトを実行する以外は何もしません。戻りステータスはゼロです。

投稿でこれを指摘してくれたIkramに感謝します シェルスクリプトは複数行のコメントを入れます

26
asev69

送信するコマンドなしで「here」ドキュメントを使用できます。

#!/bin/bash
echo "Say Something"
<<COMMENT1
    your comment 1
    comment 2
    blah
COMMENT1
echo "Do something else"

ウィキペディア参照

20
Buggabill

テキストエディタには、検索と置換という素晴らしい機能があります。使用するエディターを言うことはありませんが、シェルスクリプトは* nixである傾向があり、私はVIを使用するため、シェルスクリプトの20〜50行目をコメントするコマンドを次に示します。

:20,50s/^/#/
9
kdgregory
: || {
your code here
your code here
your code here
your code here
}
5
jj_5698

コードを関数にラップするだけの場合はどうなりますか?

したがって、この:

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

これになる:

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

このように サイト

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

echo "Init..."
# rest of script
1
user2763554

使用しているエディターによっては、行のブロックをコメントするためのショートカットがいくつかあります。

別の回避策は、コードを「if(0)」条件ブロックに入れることです;)

0
Carlos Tasada